Ignore:
Timestamp:
Jul 28, 2025, 7:23:15 PM (3 weeks ago)
Author:
aborella
Message:

Merge with trunk r5789

Location:
LMDZ6/branches/contrails
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • LMDZ6/branches/contrails

  • LMDZ6/branches/contrails/libf/phylmd/radlwsw_m.F90

    r5589 r5791  
    1010  SUBROUTINE radlwsw( &
    1111       debut, dist, rmu0, fract, &
    12        !albedo SB >>>
    13        !  paprs, pplay,tsol,alb1, alb2, &
     12                                !albedo SB >>>
     13                                !  paprs, pplay,tsol,alb1, alb2, &
    1414       paprs, pplay,tsol,SFRWL,alb_dir, alb_dif, &
    15        !albedo SB <<<
     15                                !albedo SB <<<
    1616       t,q,wo,&
    1717       cldfra, cldemi, cldtaupd,&
     
    3131       topsw0,toplw0,solsw0,sollw0,&
    3232       lwdnc0, lwdn0, lwdn, lwupc0, lwup0, lwup,&
     33       lwtoa0b, lwtoab , &                       !FC flux spectraux LW TOA
    3334       swdnc0, swdn0, swdn, swupc0, swup0, swup,&
    3435       topswad_aero, solswad_aero,&
     
    3839       solsw_aero, solsw0_aero, &
    3940       topswcf_aero, solswcf_aero,&
    40        !-C. Kleinschmitt for LW diagnostics
     41                                !-C. Kleinschmitt for LW diagnostics
    4142       toplwad_aero, sollwad_aero,&
    4243       toplwai_aero, sollwai_aero, &
    4344       toplwad0_aero, sollwad0_aero, &
    44        !-end
     45                                !-end
    4546       ZLWFT0_i, ZFLDN0, ZFLUP0, &
    4647       ZSWFT0_i, ZFSDN0, ZFSUP0, &
     48       ZFLUX_DIR, ZFLUX_DIR_CLEAR, ZFLUX_DIR_INTO_SUN, &
    4749       cloud_cover_sw, &
    4850       !--AB contrails radiative effects
     
    9395    USE yoethf_mod_h
    9496    USE phys_constants_mod, ONLY: dobson_u
     97    USE wxios_mod, ONLY: missing_val
    9598
    9699    !======================================================================
     
    266269    REAL,    INTENT(out) :: lwdn(KLON,kflev+1),lwdn0(KLON,kflev+1), lwdnc0(KLON,kflev+1)
    267270    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
    268274    REAL,    INTENT(out) :: topswad_aero(KLON), solswad_aero(KLON)         ! output: aerosol direct forcing at TOA and surface
    269275    REAL,    INTENT(out) :: topswai_aero(KLON), solswai_aero(KLON)         ! output: aerosol indirect forcing atTOA and surface
     
    305311    REAL(KIND=8) ZFLDNC0(KDLON,KFLEV+1)
    306312    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
    308314    INTEGER ist,iend,ktdia,kmode
    309315    REAL(KIND=8) PSCT
     
    319325
    320326    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 !
    323334    ! AI 02.2021
    324335#ifdef CPP_ECRAD
     
    344355    REAL(KIND=8) ZAEROSOL_OLD(KLON,6,KLEV), &  !
    345356         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
    353361         ZFLUX_SW_DN_TOA(klon), &     ! DN SW flux at TOA
    354          ZEMIS_OUT(klon)              ! effective broadband emissivity
    355 
    356     REAL(KIND=8) ZLWDERIVATIVE(klon,klev+1)   ! LW derivatives
    357     REAL(KIND=8) ZSWDIFFUSEBAND(klon,NSW), &  ! SW DN flux in diffuse albedo band
    358          ZSWDIRECTBAND(klon,NSW)      ! SW DN flux in direct albedo band
     362         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
    359367    REAL(KIND=8) SOLARIRAD
    360368    REAL(KIND=8) seuilmach
     
    372380         ZO2_off(klon,klev)               ! O2#endif
    373381#endif
    374 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
     382    !
    375383
    376384    REAL(kind=8) POZON(kdlon, kflev, size(wo, 3)) ! mass fraction of ozone
    377385    ! "POZON(:, :, 1)" is for the average day-night field,
    378386    ! "POZON(:, :, 2)" is for daylight time.
    379 !!!!! Modif MPL 6.01.09 avec RRTM, on passe de 5 a 6 
     387    ! Modif MPL 6.01.09 avec RRTM, on passe de 5 a 6 
    380388    REAL(KIND=8) PAER(kdlon,kflev,6)
    381389    REAL(KIND=8) PCLDLD(kdlon,kflev)
     
    432440    ! "POZON(:, :, 1)" is for the average day-night field,
    433441    ! "POZON(:, :, 2)" is for daylight time.
    434 !!!!! Modif MPL 6.01.09 avec RRTM, on passe de 5 a 6     
     442    ! Modif MPL 6.01.09 avec RRTM, on passe de 5 a 6     
    435443    REAL(KIND=8) PAER_i(kdlon,kflev,6)
    436444    REAL(KIND=8) PDP_i(klon,klev)
     
    470478    REAL(KIND=8) ZFLUX_i (klon,2,klev+1)
    471479    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
    472487    REAL(KIND=8) ZFSDWN_i (klon,klev+1)
    473488    REAL(KIND=8) ZFCDWN_i (klon,klev+1)
     
    578593
    579594    IF (type_trac == 'repr') THEN
    580 IF (CPPKEY_REPROBUS) THEN
    581        IF (iflag_rrtm==0) THEN
    582           IF (ok_SUNTIME) PSCT = solaireTIME/zdist/zdist
    583           print*,'Constante solaire: ',PSCT*zdist*zdist
    584        ENDIF
    585 END IF
     595       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
    586601    ENDIF
    587602
     
    613628          !albedo SB <<<
    614629
    615           PEMIS(i) = 1.0    !!!!! A REVOIR (MPL)
     630          PEMIS(i) = 1.0    ! A REVOIR (MPL)
    616631          PVIEW(i) = 1.66
    617632          PPSOL(i) = paprs(iof+i,1)
     
    662677
    663678       IF (type_trac == 'repr') THEN
    664 IF (CPPKEY_REPROBUS) THEN
    665           ndimozon = size(wo, 3)
    666           CALL RAD_INTERACTIF(POZON,iof)
    667 END IF
     679          IF (CPPKEY_REPROBUS) THEN
     680             ndimozon = size(wo, 3)
     681             CALL RAD_INTERACTIF(POZON,iof)
     682          END IF
    668683       ENDIF
    669684       !
     
    674689       ENDDO
    675690       !
    676 !!!!! Modif MPL 6.01.09 avec RRTM, on passe de 5 a 6
     691       ! Modif MPL 6.01.09 avec RRTM, on passe de 5 a 6
    677692       DO kk = 1, 6
    678693          DO k = 1, kflev
    679694             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)
    681696             ENDDO
    682697          ENDDO
     
    695710       !===== iflag_rrtm ================================================
    696711       !     
    697        IF (iflag_rrtm == 0) THEN       !!!! remettre 0 juste pour tester l'ancien rayt via rrtm
    698           !
     712       test_iflag_rrtm: IF (iflag_rrtm == 0) THEN       ! remettre 0 juste pour tester l'ancien rayt via rrtm
     713          ! {{{
    699714          !--- Mise a zero des tableaux output du rayonnement LW-AR4 ----------             
    700715          DO k = 1, kflev+1
     
    817832             ENDDO
    818833          ENDDO
    819           !
    820        ELSE IF (iflag_rrtm == 1) then  
     834          ! }}}
     835       ELSE IF (iflag_rrtm == 1) then test_iflag_rrtm
    821836#ifdef CPP_RRTM
    822837          !      if (prt_level.gt.10)write(lunout,*)'CPP_RRTM=.T.'
     
    928943          DO k=1,kflev
    929944             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=top
     945             !            POZON_i(1:klon,k)=POZON(1:klon,k)         ! on laisse 1=sol et klev=top
    931946             !          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 6     
     947             ! Modif MPL 6.01.09 avec RRTM, on passe de 5 a 6     
    933948             DO i=1,6
    934949                PAER_i(1:klon,k,i)=PAER(1:klon,kflev+1-k,i)
     
    9941009               PTAU_LW_TOT, PTAU_LW_NAT,               &  ! rajoute par C. Kleinschmitt
    9951010               ZFLUX_i  , ZFLUC_i ,&
     1011               ZTOAB_i   , ZTOACB_i, &                    ! FC flux spectraux TOA
    9961012               ZFSDWN_i , ZFSUP_i , ZFCDWN_i, ZFCUP_i, ZFCCDWN_i, ZFCCUP_i, ZFLCCDWN_i, ZFLCCUP_i, &
    9971013               ZTOPSWADAERO,ZSOLSWADAERO,&  ! rajoute par OB pour diagnostics
     
    10141030          ! & PTOPSWCFAERO,PSOLSWCFAERO,&
    10151031          ! & PSWADAERO,& !--NL
    1016           !!--LW diagnostics CK
     1032          !--LW diagnostics CK
    10171033          ! & PTOPLWADAERO,PSOLLWADAERO,&
    10181034          ! & PTOPLWAD0AERO,PSOLLWAD0AERO,&
    10191035          ! & PTOPLWAIAERO,PSOLLWAIAERO,&
    10201036          ! & PLWADAERO,& !--NL
    1021           !!..end
     1037          !..end
    10221038          ! & ok_ade, ok_aie, ok_volcan, flag_aerosol,flag_aerosol_strat,&
    10231039          ! & flag_aer_feedback)
     
    11491165             !         
    11501166             IF (fract(i) == 0.) THEN
    1151 !!!!! A REVOIR MPL (20090630) ca n a pas de sens quand fract=0
     1167                ! A REVOIR MPL (20090630) ca n a pas de sens quand fract=0
    11521168                ! pas plus que dans le sw_AR4
    11531169                zalbpla(i)   = 1.0e+39
     
    11551171                zalbpla(i)   = ZFSUP(i,klev+1)/ZFSDN(i,klev+1)
    11561172             ENDIF
    1157 !!! 5 juin 2015
    1158 !!! Correction MP bug RRTM
     1173             ! 5 juin 2015
     1174             ! Correction MP bug RRTM
    11591175             zsollwdown(i)= -1.*ZFLDN(i,1)
    11601176          ENDDO
     
    11911207             ENDDO
    11921208          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
    11931217#else
    11941218          abort_message="You should compile with -rrtm if running with iflag_rrtm=1"
     
    11971221          !======================================================================
    11981222          ! AI fev 2021
    1199        ELSE IF(iflag_rrtm == 2) THEN
     1223       ELSE IF(iflag_rrtm == 2) THEN test_iflag_rrtm
    12001224          print*,'Traitement cas iflag_rrtm = ',iflag_rrtm
    12011225          !    print*,'Mise a zero des flux '
     
    13481372          ! AI mars 2022
    13491373          SOLARIRAD = solaire/zdist/zdist
    1350           !! diagnos pour la comparaison a la version offline
    1351 !!! - Gas en VMR pour offline et MMR pour online
    1352 !!! - on utilise pour solarirrad une valeur constante
     1374          ! 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
    13531377          if (lldebug_for_offline) then
    13541378             SOLARIRAD = 1366.0896
     
    13971421                  & debut, ok_volcan, flag_aerosol_strat, &
    13981422                  & day_cur, current_time, &
    1399                   !       Cste solaire/(d_Terre-Soleil)**2
     1423                                !       Cste solaire/(d_Terre-Soleil)**2
    14001424                  & SOLARIRAD, &
    1401                   !       Cos(angle zin), temp sol             
     1425                                !       Cos(angle zin), temp sol             
    14021426                  & rmu0, tsol, &
    1403                   !       Albedo diffuse et directe
     1427                                !       Albedo diffuse et directe
    14041428                  & PALBD_NEW,PALBP_NEW, &   
    1405                   !       Emessivite : PEMIS_WINDOW (???), &
     1429                                !       Emessivite : PEMIS_WINDOW (???), &
    14061430                  & ZEMIS, ZEMISW, &
    1407                   !       longitude(rad), sin(latitude), PMASQ_ ???
     1431                                !       longitude(rad), sin(latitude), PMASQ_ ???
    14081432                  & ZGELAM, ZGEMU, &
    1409                   !       Temp et pres aux interf, vapeur eau, Satur spec humid
     1433                                !       Temp et pres aux interf, vapeur eau, Satur spec humid
    14101434                  & paprs_i, ZTH_i, q_i, qsat_i, &
    1411                   !       Gas
     1435                                !       Gas
    14121436                  & ZCO2, ZCH4, ZN2O, ZNO2, ZCFC11, ZCFC12, ZHCFC22, &
    14131437                  & ZCCL4, POZON_i(:,:,1), ZO2, &
    1414                   !       nuages :
     1438                                !       nuages :
    14151439                  & cldfra_i, flwc_i, fiwc_i, ZQ_SNOW, &
    1416                   !       rayons effectifs des gouttelettes             
     1440                                !       rayons effectifs des gouttelettes             
    14171441                  & ref_liq_i, ref_ice_i, &
    1418                   !       aerosols
     1442                                !       aerosols
    14191443                  & ZAEROSOL_OLD, ZAEROSOL, &
    1420                   ! Outputs
    1421                   !       Net flux :
     1444                                ! Outputs
     1445                                !       Net flux :
    14221446                  & ZSWFT_i, ZLWFT_i, ZSWFT0_ii, ZLWFT0_ii, &
    1423                   !       DWN flux :
     1447                                !       DWN flux :
    14241448                  & ZFSDWN_i, ZFLUX_i(:,2,:), ZFCDWN_i, ZFLUC_i(:,2,:), &
    1425                   !       UP flux :
     1449                                !       UP flux :
    14261450                  & ZFSUP_i, ZFLUX_i(:,1,:), ZFCUP_i, ZFLUC_i(:,1,:), &
    1427                   !       Surf Direct flux : ATTENTION
    1428                   & ZFLUX_DIR, ZFLUX_DIR_CLEAR, ZFLUX_DIR_INTO_SUN, &
    1429                   !       UV and para flux
     1451                                !       Surf Direct flux : ATTENTION
     1452                  & ZFLUX_DIR_i, ZFLUX_DIR_CLEAR_i, ZFLUX_DIR_INTO_SUN, &
     1453                                !       UV and para flux
    14301454                  & ZFLUX_UV, ZFLUX_PAR, ZFLUX_PAR_CLEAR, &
    1431                   !      & ZFLUX_SW_DN_TOA,
     1455                                !      & ZFLUX_SW_DN_TOA,
    14321456                  & ZEMIS_OUT, ZLWDERIVATIVE, &
    14331457                  & PSFSWDIF, PSFSWDIR, &
     
    14411465                  & debut, ok_volcan, flag_aerosol_strat, &
    14421466                  & day_cur, current_time, &
    1443                   !       Cste solaire/(d_Terre-Soleil)**2
     1467                                !       Cste solaire/(d_Terre-Soleil)**2
    14441468                  & SOLARIRAD, &
    1445                   !       Cos(angle zin), temp sol             
     1469                                !       Cos(angle zin), temp sol             
    14461470                  & rmu0, tsol, &
    1447                   !       Albedo diffuse et directe
     1471                                !       Albedo diffuse et directe
    14481472                  & PALBD_NEW,PALBP_NEW, &
    1449                   !       Emessivite : PEMIS_WINDOW (???), &
     1473                                !       Emessivite : PEMIS_WINDOW (???), &
    14501474                  & ZEMIS, ZEMISW, &
    1451                   !       longitude(rad), sin(latitude), PMASQ_ ???
     1475                                !       longitude(rad), sin(latitude), PMASQ_ ???
    14521476                  & ZGELAM, ZGEMU, &
    1453                   !       Temp et pres aux interf, vapeur eau, Satur spec humid
     1477                                !       Temp et pres aux interf, vapeur eau, Satur spec humid
    14541478                  & paprs_i, ZTH_i, q_i, qsat_i, &
    1455                   !       Gas
     1479                                !       Gas
    14561480                  & ZCO2, ZCH4, ZN2O, ZNO2, ZCFC11, ZCFC12, ZHCFC22, &
    14571481                  & ZCCL4, POZON_i(:,:,1), ZO2, &
    1458                   !       nuages :
     1482                                !       nuages :
    14591483                  & cldfra_i, flwc_i, fiwc_i, ZQ_SNOW, &
    1460                   !       rayons effectifs des gouttelettes             
     1484                                !       rayons effectifs des gouttelettes             
    14611485                  & ref_liq_i, ref_ice_i, &
    1462                   !       aerosols
     1486                                !       aerosols
    14631487                  & ZAEROSOL_OLD, ZAEROSOL, &
    1464                   ! Outputs
    1465                   !       Net flux :
     1488                                ! Outputs
     1489                                !       Net flux :
    14661490                  & ZSWFT_i, ZLWFT_i, ZSWFT0_ii, ZLWFT0_ii, &
    1467                   !       DWN flux :
     1491                                !       DWN flux :
    14681492                  & ZFSDWN_i, ZFLUX_i(:,2,:), ZFCDWN_i, ZFLUC_i(:,2,:), &
    1469                   !       UP flux :
     1493                                !       UP flux :
    14701494                  & ZFSUP_i, ZFLUX_i(:,1,:), ZFCUP_i, ZFLUC_i(:,1,:), &
    1471                   !       Surf Direct flux : ATTENTION
    1472                   & ZFLUX_DIR, ZFLUX_DIR_CLEAR, ZFLUX_DIR_INTO_SUN, &
    1473                   !       UV and para flux
     1495                                !       Surf Direct flux : ATTENTION
     1496                  & ZFLUX_DIR_i, ZFLUX_DIR_CLEAR_i, ZFLUX_DIR_INTO_SUN, &
     1497                                !       UV and para flux
    14741498                  & ZFLUX_UV, ZFLUX_PAR, ZFLUX_PAR_CLEAR, &
    1475                   !      & ZFLUX_SW_DN_TOA,
     1499                                !      & ZFLUX_SW_DN_TOA,
    14761500                  & ZEMIS_OUT, ZLWDERIVATIVE, &
    14771501                  & PSFSWDIF, PSFSWDIR, &
     
    15301554                ZFLDNC0(i,k+1)= -1.*ZFLCCDWN_i(i,klev+1-k)
    15311555                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)
    15321559                IF (ok_volcan) THEN
    15331560                   ZSWADAERO(i,k+1)=ZSWADAERO(i,klev+1-k)*fract(i) !--NL
     
    15571584          ZSOLSWCF_AERO(:,2)=ZSOLSWCF_AERO(:,2)*fract(:)
    15581585          ZSOLSWCF_AERO(:,3)=ZSOLSWCF_AERO(:,3)*fract(:)
     1586          ztoplwadaero = missing_val
     1587          ztoplwad0aero = missing_val
    15591588
    15601589          ! ---------
     
    16011630          print*,'Fin traitement ECRAD'
    16021631          ! Fin ECRAD
    1603        ENDIF        ! iflag_rrtm
     1632       ENDIF test_iflag_rrtm
    16041633       ! ecrad
    16051634       !======================================================================
Note: See TracChangeset for help on using the changeset viewer.