Ignore:
Timestamp:
Jul 2, 2021, 3:25:47 PM (3 years ago)
Author:
idelkadi
Message:

Corrections in the routine radlwsw.F90, in the case of use of the Ecrad radiative code:

  • correction of signs of downward radiative flux
  • correction of the ozone unit to be used in Ecrad
  • removal of unituls comments in radlwsw.F90
File:
1 edited

Legend:

Unmodified
Added
Removed
  • LMDZ6/trunk/libf/phylmd/radlwsw_m.F90

    r3918 r3951  
    302302! ATTENTION les dimensions klon, kdlon ???
    303303! INPUTS
     304  REAL, DIMENSION(kdlon,kflev+1) :: ZSWFT0_ii, ZLWFT0_ii
    304305  REAL(KIND=8) ZEMISW(klon), &              ! LW emissivity inside the window region
    305306               ZEMIS(klon)                  ! LW emissivity outside the window region
     
    313314               ZCFC12(klon,klev), &         ! CFC12
    314315               ZHCFC22(klon,klev), &        ! HCFC22
    315                ZCCL4(klon,klev), &          ! CCL4
    316                ZO3_DP(klon,klev), ZO3_DP_i(klon,klev)            ! Ozone
     316               ZCCL4(klon,klev)           ! CCL4
     317!               ZO3_DP(klon,klev), ZO3_DP_i(klon,klev)            ! Ozone
    317318  REAL(KIND=8) ZQ_RAIN(klon,klev), &        ! Rain cloud mass mixing ratio (kg/kg) ?
    318319               ZQ_SNOW(klon,klev)           ! Snow cloud mass mixing ratio (kg/kg) ?
     
    567568        POZON(i,k, :) = wo(iof+i, k, :) * RG * dobson_u * 1e3 &
    568569             / (paprs(iof+i, k) - paprs(iof+i, k+1))
    569 #ifdef CPP_ECRAD
    570         ZO3_DP(i,k) = wo(iof+i, k, 1) * RG * dobson_u * 1e3
    571 #endif
    572570!       A activer pour CCMVAL on prend l'ozone impose (MPL 07042010)
    573571!       POZON(i,k,:) = wo(i,k,:) 
     
    897895! RII0 = RIP0M15 ! =rip0m if Morcrette non-each time step call.
    898896         RII0=solaire/zdist/zdist
    899 !print*,'+++ radlwsw: solaire ,RII0',solaire,RII0
    900897!  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    901898! Ancien appel a RECMWF (celui du cy25)
     
    928925! Nouvel appel a RECMWF (celui du cy32t0)
    929926         CALL RECMWF_AERO (ist , iend, klon , ktdia  , klev   , kmode ,&
    930 !                          KST,  KEND, KPROMA, KTDIA , KLEV,  KMODE
    931927         PALBD_NEW,PALBP_NEW, paprs_i , pplay_i , RCO2   , cldfra_i,&
    932 !        PALBD ,   PALBP ,    PAPRS ,   PAPRSF ,  PCCO2 , PCLFR
    933928         POZON_i  , PAER_i  , PDP_i   , PEMIS   , rmu0   ,&
    934 !        PQO3  ,    PAER  ,   PDP   ,   PEMIS  , PMU0
    935           q_i     , qsat_i  , fiwc_i  , flwc_i  , zmasq  , t_i  ,tsol,&
    936 !         PQ       , PQS   , PQIWP ,     PQLWP , PSLM   , PT    , PTS,
     929         q_i     , qsat_i  , fiwc_i  , flwc_i  , zmasq  , t_i  ,tsol,&
    937930         ref_liq_i, ref_ice_i, &
    938 !        PREF_LIQ, PREF_ICE
    939931         ref_liq_pi_i, ref_ice_pi_i, &   ! rajoute par OB pour diagnostiquer effet indirect
    940 !        PREF_LIQ_PI, PREF_ICE_PI
    941932         ZEMTD_i  , ZEMTU_i , ZTRSO_i ,&
    942 !        PEMTD , PEMTU , PTRSO
    943933         ZTH_i    , ZCTRSO  , ZCEMTR  , ZTRSOD  ,&
    944 !        PTH   ,     PCTRSO,   PCEMTR, PTRSOD
    945934         ZLWFC    , ZLWFT_i , ZSWFC   , ZSWFT_i ,&
    946 !        PLWFC,     PLWFT,    PSWFC,    PSWFT,
    947935         PSFSWDIR , PSFSWDIF, PFSDNN  , PFSDNV  ,&
    948 !        PSFSWDIR,  PSFSWDIF, PFSDNN,    PFSDNV
    949936         PPIZA_TOT, PCGA_TOT,PTAU_TOT,&
    950 !        PPIZA_TOT, PCGA_TOT,PTAU_TOT
    951937         PPIZA_NAT, PCGA_NAT,PTAU_NAT,           &  ! rajoute par OB pour diagnostiquer effet direct
    952 !        PPIZA_NAT,PCGA_NAT,PTAU_NAT
    953938         PTAU_LW_TOT, PTAU_LW_NAT,               &  ! rajoute par C. Kleinschmitt
    954 !        PTAU_LW_TOT, PTAU_LW_NAT,
    955939         ZFLUX_i  , ZFLUC_i ,&
    956 !        PFLUX,      PFLUC
    957940         ZFSDWN_i , ZFSUP_i , ZFCDWN_i, ZFCUP_i, ZFCCDWN_i, ZFCCUP_i, ZFLCCDWN_i, ZFLCCUP_i, &
    958 !        PFSDN ,    PFSUP ,   PFSCDN , PFSCUP,   PFSCCDN,   PFSCCUP,  PFLCCDN,    PFLCCUP
    959941         ZTOPSWADAERO,ZSOLSWADAERO,&  ! rajoute par OB pour diagnostics
    960 !        PTOPSWADAERO,PSOLSWADAERO
    961942         ZTOPSWAD0AERO,ZSOLSWAD0AERO,&
    962943         ZTOPSWAIAERO,ZSOLSWAIAERO, &
     
    1010991        CALL writefield_phy('zfcup_i',ZFCUP_i,klev+1)
    1011992      ENDIF
    1012 ! --------- output RECMWFL
    1013 !  ZEMTD        (KPROMA,KLEV+1)  ; TOTAL DOWNWARD LONGWAVE EMISSIVITY
    1014 !  ZEMTU        (KPROMA,KLEV+1)  ; TOTAL UPWARD   LONGWAVE EMISSIVITY
    1015 !  ZTRSO        (KPROMA,KLEV+1)  ; TOTAL SHORTWAVE TRANSMISSIVITY
    1016 !  ZTH          (KPROMA,KLEV+1)  ; HALF LEVEL TEMPERATURE
    1017 !  ZCTRSO       (KPROMA,2)       ; CLEAR-SKY SHORTWAVE TRANSMISSIVITY
    1018 !  ZCEMTR       (KPROMA,2)       ; CLEAR-SKY NET LONGWAVE EMISSIVITY
    1019 !  ZTRSOD       (KPROMA)         ; TOTAL-SKY SURFACE SW TRANSMISSITY
    1020 !  ZLWFC        (KPROMA,2)       ; CLEAR-SKY LONGWAVE FLUXES
    1021 !  ZLWFT        (KPROMA,KLEV+1)  ; TOTAL-SKY LONGWAVE FLUXES
    1022 !  ZSWFC        (KPROMA,2)       ; CLEAR-SKY SHORTWAVE FLUXES
    1023 !  ZSWFT        (KPROMA,KLEV+1)  ; TOTAL-SKY SHORTWAVE FLUXES
    1024 !  PPIZA_TOT    (KPROMA,KLEV,NSW); Single scattering albedo of total aerosols
    1025 !  PCGA_TOT     (KPROMA,KLEV,NSW); Assymetry factor for total aerosols
    1026 !  PTAU_TOT     (KPROMA,KLEV,NSW); Optical depth of total aerosols
    1027 !  PPIZA_NAT    (KPROMA,KLEV,NSW); Single scattering albedo of natural aerosols
    1028 !  PCGA_NAT     (KPROMA,KLEV,NSW); Assymetry factor for natural aerosols
    1029 !  PTAU_NAT     (KPROMA,KLEV,NSW); Optical depth of natiral aerosols
    1030 !  PTAU_LW_TOT  (KPROMA,KLEV,NLW); LW Optical depth of total aerosols 
    1031 !  PTAU_LW_NAT  (KPROMA,KLEV,NLW); LW Optical depth of natural aerosols 
    1032 !  PSFSWDIR     (KPROMA,NSW)     ;
    1033 !  PSFSWDIF     (KPROMA,NSW)     ;
    1034 !  PFSDNN       (KPROMA)         ;
    1035 !  PFSDNV       (KPROMA)         ;
     993
    1036994! ---------
    1037995! ---------
     
    10911049      ZSOLSWCF_AERO(:,3)=ZSOLSWCF_AERO(:,3)*fract(:)
    10921050
    1093 !     print*,'SW_RRTM ZFSDN0 1 , klev:',ZFSDN0(1:klon,1),ZFSDN0(1:klon,klev)
    1094 !     print*,'SW_RRTM ZFSUP0 1 , klev:',ZFSUP0(1:klon,1),ZFSUP0(1:klon,klev)
    1095 !     print*,'SW_RRTM ZFSDN  1 , klev:',ZFSDN(1:klon,1),ZFSDN(1:klon,klev)
    1096 !     print*,'SW_RRTM ZFSUP  1 , klev:',ZFSUP(1:klon,1),ZFSUP(1:klon,klev)     
    1097 !     print*,'OK1'
    10981051! ---------
    10991052! ---------
     
    11981151      ENDDO
    11991152!
    1200 ! Aerosols A REVOIR
     1153! AI ATTENTION Aerosols A REVOIR
    12011154!      DO i = 1, kdlon
    12021155!      DO k = 1, kflev
     
    12671220         ENDDO
    12681221         DO k=1,kflev
    1269             ZO3_DP_i(1:klon,k)=ZO3_DP(1:klon,kflev+1-k)
    1270             DO i=1,6
    1271             PAER_i(1:klon,k,i)=PAER(1:klon,kflev+1-k,i)
    1272             ENDDO
     1222            POZON_i(1:klon,k,:)=POZON(1:klon,kflev+1-k,:)
     1223!            ZO3_DP_i(1:klon,k)=ZO3_DP(1:klon,kflev+1-k)
     1224!            DO i=1,6
     1225            PAER_i(1:klon,k,:)=PAER(1:klon,kflev+1-k,:)
     1226!            ENDDO
    12731227         ENDDO
    12741228! AI 02.2021
    1275 ! Calcul of ZTH_i
     1229! Calcul de ZTH_i (temp aux interfaces 1:klev+1)
    12761230         DO K=2,KLEV
    12771231            ZTH_i(:,K)=&
     
    13061260        CALL writefield_phy('palbd_new',PALBD_NEW,NSW)
    13071261        CALL writefield_phy('palbp_new',PALBP_NEW,NSW)
    1308         CALL writefield_phy('ZO3_DP',ZO3_DP,klev)
     1262!        CALL writefield_phy('ZO3_DP',ZO3_DP,klev)
    13091263      ENDIF
    13101264
     
    13161270      & rmu0, tsol, PALBD_NEW,PALBP_NEW, &   
    13171271!       PEMIS_WINDOW (???), &
    1318       &  ZEMIS, ZEMISW, &
     1272      & ZEMIS, ZEMISW, &
    13191273!       PCCN_LAND, PCCN_SEA, & ???
    13201274      & pctsrf(:,is_ter), pctsrf(:,is_oce), &
     
    13261280      & paprs_i, ZTH_i, q_i, qsat_i, &
    13271281!       Gas
    1328       & ZCO2, ZCH4, ZN2O, ZNO2, ZCFC11, ZCFC12, ZHCFC22, ZCCL4, ZO3_DP_i, &
    1329 !       
     1282       & ZCO2, ZCH4, ZN2O, ZNO2, ZCFC11, ZCFC12, ZHCFC22, ZCCL4, POZON_i(:,:,1), &
     1283!       nuages :
    13301284      & cldfra_i, flwc_i, fiwc_i, ZQ_RAIN, ZQ_SNOW, & 
    13311285      & ref_liq_i, ref_ice_i, &
     
    13331287      & ZAEROSOL_OLD, ZAEROSOL, &
    13341288! Outputs
    1335 !       Net flux
    1336       & ZSWFT_i, ZLWFT_i, ZSWFT0_i, ZLWFT0_i, &
    1337 !       DN flux
     1289!       Net flux :
     1290      & ZSWFT_i, ZLWFT_i, ZSWFT0_ii, ZLWFT0_ii, &
     1291!       DWN flux :
    13381292      & ZFSDWN_i, ZFLUX_i(:,2,:), ZFCDWN_i, ZFLUC_i(:,2,:), &
    1339 !       UP flux
     1293!       UP flux :
    13401294      & ZFSUP_i, ZFLUX_i(:,1,:), ZFCUP_i, ZFLUC_i(:,1,:), &
    1341 !       Surf Direct flux
     1295!       Surf Direct flux : ATTENTION
    13421296      & ZFLUX_DIR, ZFLUX_DIR_CLEAR, ZFLUX_DIR_INTO_SUN, &
    13431297!       UV and para flux
     
    13481302
    13491303      print *,'========= RADLWSW: apres RADIATION_SCHEME ==================== '
    1350   IF (lldebug) THEN
    1351     if (0.eq.0) then
    1352       print *,' Net Flux '
    1353       print *,'ZSWFT_i =', ZSWFT_i
    1354       print *,'ZLWFT_i =', ZLWFT_i
    1355       print *,'ZSWFT0_i =', ZSWFT0_i
    1356       print*,'ZLWFT0_i =', ZLWFT0_i
    1357 
    1358       print*,'DN Flux '
    1359       print*,'ZFSDWN_i =', ZFSDWN_i
    1360       print*,'ZFLUX_i(:,2,:)', ZFLUX_i(:,2,:)
    1361       print*,'ZFCDWN_i =', ZFCDWN_i
    1362       print*,'ZFLUC_i(:,2,:) =', ZFLUC_i(:,2,:)
    1363 
    1364       print*,'UP Flux '
    1365       print*,'ZFSUP_i =', ZFSUP_i
    1366       print*,'ZFLUX_i(:,1,:) =', ZFLUX_i(:,1,:)
    1367       print*,'ZFCUP_i =', ZFCUP_i
    1368       print*,'ZFLUC_i(:,1,:) =', ZFLUC_i(:,1,:)
    1369 
    1370       print*,'UV and para flux '
    1371       print*,'ZFLUX_DIR =', ZFLUX_DIR
    1372       print*,'ZFLUX_DIR_CLEAR', ZFLUX_DIR_CLEAR
    1373       print*,'ZFLUX_DIR_INTO_SUN', ZFLUX_DIR_INTO_SUN
    1374     endif
    1375    ENDIF
    13761304
    13771305      IF (lldebug) THEN
    13781306        CALL writefield_phy('zlwft_i',ZLWFT_i,klev+1)
    1379         CALL writefield_phy('zlwft0_i',ZLWFT0_i,klev+1)
     1307        CALL writefield_phy('zlwft0_ii',ZLWFT0_ii,klev+1)
    13801308        CALL writefield_phy('zswft_i',ZSWFT_i,klev+1)
    1381         CALL writefield_phy('zswft0_i',ZSWFT0_i,klev+1)
     1309        CALL writefield_phy('zswft0_i',ZSWFT0_ii,klev+1)
     1310        CALL writefield_phy('zfsdwn_i',ZFSDWN_i,klev+1)
     1311        CALL writefield_phy('zflux2_i',ZFLUX_i(:,2,:),klev+1)
     1312        CALL writefield_phy('zfcdwn_i',ZFCDWN_i,klev+1)
     1313        CALL writefield_phy('zfluc2_i',ZFLUC_i(:,2,:),klev+1)
    13821314        CALL writefield_phy('psfswdir',PSFSWDIR,6)
    13831315        CALL writefield_phy('psfswdif',PSFSWDIF,6)
    1384         CALL writefield_phy('zflux_i',ZFLUX_i,klev+1)
    1385         CALL writefield_phy('zfluc_i',ZFLUC_i,klev+1)
    1386         CALL writefield_phy('zfsdwn_i',ZFSDWN_i,klev+1)
     1316        CALL writefield_phy('zflux1_i',ZFLUX_i(:,1,:),klev+1)
     1317        CALL writefield_phy('zfluc1_i',ZFLUC_i(:,1,:),klev+1)
    13871318        CALL writefield_phy('zfsup_i',ZFSUP_i,klev+1)
    1388         CALL writefield_phy('zfcdwn_i',ZFCDWN_i,klev+1)
    13891319        CALL writefield_phy('zfcup_i',ZFCUP_i,klev+1)
    13901320      ENDIF
     
    13941324! avec l ancien rayonnement AR4. Si nuit, fract=0 donc pas de
    13951325! rayonnement SW. (MPL 260609)
    1396       print*,'On retablit ordre des niveaux verticaux'
    1397       print*,'On multiplie les flux SW par fract ?'
     1326      print*,'On retablit l ordre des niveaux verticaux pour LMDZ'
     1327      print*,'On multiplie les flux SW par fract et LW dwn par -1'
    13981328      DO k=0,klev
    13991329         DO i=1,klon
     
    14051335          ZLWFT(i,k+1)  = ZLWFT_i(i,klev+1-k)
    14061336          ZSWFT(i,k+1)  = ZSWFT_i(i,klev+1-k)*fract(i)
    1407           ZSWFT0_i(i,k+1) = ZSWFT0_i(i,klev+1-k)*fract(i)
     1337          ZSWFT0_i(i,k+1) = ZSWFT0_ii(i,klev+1-k)*fract(i)
     1338          ZLWFT0_i(i,k+1) = ZLWFT0_ii(i,klev+1-k)
    14081339!
    14091340         ZFLUP(i,k+1)  = ZFLUX_i(i,1,klev+1-k)
    1410          ZFLDN(i,k+1)  = ZFLUX_i(i,2,klev+1-k)
     1341         ZFLDN(i,k+1)  = -1.*ZFLUX_i(i,2,klev+1-k)
    14111342         ZFLUP0(i,k+1) = ZFLUC_i(i,1,klev+1-k)
    1412          ZFLDN0(i,k+1) = ZFLUC_i(i,2,klev+1-k)
     1343         ZFLDN0(i,k+1) = -1.*ZFLUC_i(i,2,klev+1-k)
    14131344         ZFSDN(i,k+1)  = ZFSDWN_i(i,klev+1-k)*fract(i)
    14141345         ZFSDN0(i,k+1) = ZFCDWN_i(i,klev+1-k)*fract(i)
     
    14171348         ZFSUP0(i,k+1) = ZFCUP_i(i,klev+1-k)*fract(i)
    14181349         ZFSUPC0(i,k+1)= ZFCCUP_i(i,klev+1-k)*fract(i)
    1419          ZFLDNC0(i,k+1)= ZFLCCDWN_i(i,klev+1-k)
     1350         ZFLDNC0(i,k+1)= -1.*ZFLCCDWN_i(i,klev+1-k)
    14201351         ZFLUPC0(i,k+1)= ZFLCCUP_i(i,klev+1-k)
    14211352         IF (ok_volcan) THEN
     
    15961527 ENDDO ! j = 1, nb_gr
    15971528
    1598 !IF (lldebug) THEN
    1599 ! print*,'================== Sortie de radlw ================='
    1600 ! print*,'cool = ', cool
    1601 ! print*,'heat = ', heat
    1602 ! print*,'topsw = ', topsw
    1603 ! print*,'toplw = ', toplw
    1604 ! print*,'sollw = ', sollw
    1605 ! print*,'solsw = ', solsw
    1606 ! print*,'lwdn = ', lwdn
    1607 ! print*,'lwup = ', lwup
    1608 ! print*,'swdn = ', swdn
    1609 ! print*,'swup =', swup
    1610 !ENDIF
     1529IF (lldebug) THEN
     1530 if (0.eq.1) then
     1531! Verifs dans le cas 1D
     1532 print*,'================== Sortie de radlw ================='
     1533 print*,'******** LW LW LW *******************'
     1534 print*,'ZLWFT =',ZLWFT
     1535 print*,'ZLWFT0_i =',ZLWFT0_i
     1536 print*,'ZFLUP0 =',ZFLUP0
     1537 print*,'ZFLDN0 =',ZFLDN0
     1538 print*,'ZFLDNC0 =',ZFLDNC0
     1539 print*,'ZFLUPC0 =',ZFLUPC0
     1540
     1541 print*,'******** SW SW SW *******************'
     1542 print*,'ZSWFT =',ZSWFT
     1543 print*,'ZSWFT0_i =',ZSWFT0_i
     1544 print*,'ZFSDN =',ZFSDN
     1545 print*,'ZFSDN0 =',ZFSDN0
     1546 print*,'ZFSDNC0 =',ZFSDNC0
     1547 print*,'ZFSUP =',ZFSUP
     1548 print*,'ZFSUP0 =',ZFSUP0
     1549 print*,'ZFSUPC0 =',ZFSUPC0
     1550
     1551 print*,'******** LMDZ  *******************'
     1552 print*,'cool = ', cool
     1553 print*,'heat = ', heat
     1554 print*,'topsw = ', topsw
     1555 print*,'toplw = ', toplw
     1556 print*,'sollw = ', sollw
     1557 print*,'solsw = ', solsw
     1558 print*,'lwdn = ', lwdn
     1559 print*,'lwup = ', lwup
     1560 print*,'swdn = ', swdn
     1561 print*,'swup =', swup
     1562 endif
     1563ENDIF
    16111564
    16121565END SUBROUTINE radlwsw
Note: See TracChangeset for help on using the changeset viewer.