Ignore:
Timestamp:
Jun 17, 2022, 4:24:49 PM (2 years ago)
Author:
lguez
Message:

Sync latest trunk changes to branch LMDZ-ECRAD.

Location:
LMDZ6/branches/LMDZ-ECRAD
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • LMDZ6/branches/LMDZ-ECRAD

  • LMDZ6/branches/LMDZ-ECRAD/libf/phylmd/radlwsw_m.F90

    r3880 r4171  
    1616   t,q,wo,&
    1717   cldfra, cldemi, cldtaupd,&
    18    ok_ade, ok_aie, ok_volcan, flag_aerosol,&
     18   ok_ade, ok_aie, ok_volcan, flag_volc_surfstrat, flag_aerosol,&
    1919   flag_aerosol_strat, flag_aer_feedback, &
    2020   tau_aero, piz_aero, cg_aero,&
     
    4040   toplwad_aero, sollwad_aero,&
    4141   toplwai_aero, sollwai_aero, &
    42    toplwad0_aero, sollwad0_aero,&
     42   toplwad0_aero, sollwad0_aero, &
    4343!-end
    4444   ZLWFT0_i, ZFLDN0, ZFLUP0,&
     
    4848  USE DIMPHY
    4949  USE assert_m, ONLY : assert
    50   USE infotrac_phy, ONLY : type_trac
     50  USE infotrac_phy, ONLY : types_trac
    5151  USE write_field_phy
    5252
     
    107107  ! ok_aie--- input-L- apply the Aerosol Indirect Effect or not?
    108108  ! 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)
    109110  ! flag_aerosol input-I- aerosol flag from 0 to 6
    110111  ! flag_aerosol_strat input-I- use stratospheric aerosols flag (0, 1, 2)
     
    210211  LOGICAL, INTENT(in)  :: ok_ade, ok_aie                                 ! switches whether to use aerosol direct (indirect) effects or not
    211212  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.
    213215  INTEGER, INTENT(in)  :: flag_aerosol                                   ! takes value 0 (no aerosol) or 1 to 6 (aerosols)
    214216  INTEGER, INTENT(in)  :: flag_aerosol_strat                             ! use stratospheric aerosols
     
    222224  REAL,    INTENT(in)  :: piz_aero_sw_rrtm(KLON,KLEV,2,NSW)                 ! aerosol optical properties RRTM
    223225  REAL,    INTENT(in)  :: cg_aero_sw_rrtm(KLON,KLEV,2,NSW)                  ! aerosol optical properties RRTM
     226! AI
    224227!--OB fin
    225228
     
    302305! ATTENTION les dimensions klon, kdlon ???
    303306! INPUTS
     307  REAL, DIMENSION(kdlon,kflev+1) :: ZSWFT0_ii, ZLWFT0_ii
    304308  REAL(KIND=8) ZEMISW(klon), &              ! LW emissivity inside the window region
    305309               ZEMIS(klon)                  ! LW emissivity outside the window region
    306310  REAL(KIND=8) ZGELAM(klon), &              ! longitudes en rad
    307311               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
    317322  REAL(KIND=8) ZQ_RAIN(klon,klev), &        ! Rain cloud mass mixing ratio (kg/kg) ?
    318323               ZQ_SNOW(klon,klev)           ! Snow cloud mass mixing ratio (kg/kg) ?
     
    331336  REAL(KIND=8) ZSWDIFFUSEBAND(klon,NSW), &  ! SW DN flux in diffuse albedo band
    332337               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
    333352#endif
    334353!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
     
    364383  REAL(KIND=8) ztopswaiaero(kdlon), zsolswaiaero(kdlon)     ! dito, indirect
    365384!--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
    368388!-LW by CK
    369389  REAL(KIND=8) ztoplwadaero(kdlon), zsollwadaero(kdlon)     ! LW Aerosol direct forcing at TOAand surface
     
    449469
    450470! =========  INITIALISATIONS ==============================================
     471 IF (lldebug) THEN
    451472  print*,'Entree dans radlwsw '
    452473  print*,'************* INITIALISATIONS *****************************'
    453474  print*,'klon, kdlon, klev, kflev =',klon, kdlon, klev, kflev
     475 ENDIF
    454476
    455477  CALL assert(size(wo, 1) == klon, size(wo, 2) == klev, "radlwsw wo")
     
    463485  pizaero(:,:,:,:)=0.
    464486  cgaero(:,:,:,:)=0.
    465   lldebug=.FALSE.
     487!  lldebug=.FALSE.
    466488
    467489  ztopsw_aero(:,:)  = 0. !ym missing init : warning : not initialized in SW_AEROAR4
     
    480502
    481503  !
     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
    482526  !-------------------------------------------
    483527  nb_gr = KLON / kdlon
     
    506550  PSCT = solaire/zdist/zdist
    507551
    508   IF (type_trac == 'repr') THEN
     552  IF (ANY(types_trac == 'repr')) THEN
    509553#ifdef REPROBUS
    510554    IF (iflag_rrtm==0) THEN
     
    515559  ENDIF
    516560
     561 IF (lldebug) THEN
    517562  print*,'************** Debut boucle de 1 a ', nb_gr
     563 ENDIF
     564
    518565  DO j = 1, nb_gr
    519566    iof = kdlon*(j-1)
     
    588635    ENDDO
    589636
    590     IF (type_trac == 'repr') THEN
     637    IF (ANY(types_trac == 'repr')) THEN
    591638#ifdef REPROBUS
    592639       ndimozon = size(wo, 3)
     
    890937! RII0 = RIP0M15 ! =rip0m if Morcrette non-each time step call.
    891938         RII0=solaire/zdist/zdist
    892 !print*,'+++ radlwsw: solaire ,RII0',solaire,RII0
    893939!  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    894940! Ancien appel a RECMWF (celui du cy25)
     
    925971!        PALBD ,   PALBP ,    PAPRS ,   PAPRSF ,  PCCO2 , PCLFR
    926972         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,&
    929974!         PQ       , PQS   , PQIWP ,     PQLWP , PSLM   , PT    , PTS,
    930975         ref_liq_i, ref_ice_i, &
     
    9601005         ZTOPLWAIAERO,ZSOLLWAIAERO, &
    9611006         ZLWADAERO, & !--NL
     1007         volmip_solsw, flag_volc_surfstrat, & !--VOLMIP
    9621008         ok_ade, ok_aie, ok_volcan, flag_aerosol,flag_aerosol_strat, flag_aer_feedback) ! flags aerosols
    9631009
     
    10031049        CALL writefield_phy('zfcup_i',ZFCUP_i,klev+1)
    10041050      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
    10291052! ---------
    10301053! ---------
     
    10841107      ZSOLSWCF_AERO(:,3)=ZSOLSWCF_AERO(:,3)*fract(:)
    10851108
    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'
    10911109! ---------
    10921110! ---------
     
    11351153!     print*,'OK2'
    11361154
     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
    11371162! extrait de SW_AR4
    11381163!     DO k = 1, KFLEV
     
    11661191    ELSE IF(iflag_rrtm == 2) THEN
    11671192    print*,'Traitement cas iflag_rrtm = ',iflag_rrtm
    1168     print*,'Mise a zero des flux '
     1193!    print*,'Mise a zero des flux '
    11691194#ifdef CPP_ECRAD
    11701195      DO k = 1, kflev+1
     
    11911216      ENDDO
    11921217!
    1193 ! Aerosols A REVOIR
     1218! AI ATTENTION Aerosols A REVOIR
    11941219!      DO i = 1, kdlon
    11951220!      DO k = 1, kflev
     1221!      DO kk= 1, naero_tot
    11961222!      DO kk=1, NSW
    11971223!
     
    12031229!      PPIZA_NAT(i,kflev+1-k,kk)=piz_aero_sw_rrtm(i,k,1,kk)
    12041230!      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)
    12051232!
    12061233!      ENDDO
     
    12411268
    12421269! On met les donnees dans l'ordre des niveaux ecrad
    1243          print*,'On inverse sur la verticale '
     1270!         print*,'On inverse sur la verticale '
    12441271         paprs_i(:,1)=paprs(:,klev+1)
    12451272         DO k=1,klev
     
    12531280            flwc_i(1:klon,k)    =flwc(1:klon,klev+1-k)
    12541281            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
    12571284!-OB
    12581285            ref_liq_pi_i(1:klon,k) =ref_liq_pi(1:klon,klev+1-k)
     
    12601287         ENDDO
    12611288         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
    12661294         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
    12691319         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
    12741326         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
    12781336
    12791337      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
    12811356        CALL writefield_phy('rmu0',rmu0,1)
    12821357        CALL writefield_phy('tsol',tsol,1)
    12831358        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)
    12901359        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)
    12931360        CALL writefield_phy('ZTH_i',ZTH_i,klev+1)
    12941361        CALL writefield_phy('cldfra_i',cldfra_i,klev)
    1295         CALL writefield_phy('paer_i',PAER_i,klev)
    12961362        CALL writefield_phy('q_i',q_i,klev)
    12971363        CALL writefield_phy('fiwc_i',fiwc_i,klev)
     
    12991365        CALL writefield_phy('palbd_new',PALBD_NEW,NSW)
    13001366        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 
    13041382      CALL RADIATION_SCHEME &
    13051383      & (ist, iend, klon, klev, naero_tot, NSW, &
    13061384! ??? naero_tot
    13071385      & 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, &
    13121392!       PCCN_LAND, PCCN_SEA, & ???
    13131393      & pctsrf(:,is_ter), pctsrf(:,is_oce), &
    13141394!       longitude(rad), sin(latitude), PMASQ_ ???
    13151395      & ZGELAM, ZGEMU, zmasq, &
     1396!       pression et temp aux milieux
    13161397      & pplay_i, t_i, &
    1317 !       PTEMPERATURE_H ?, &
     1398!       PTEMPERATURE_H ?,
    13181399      & 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 :
    13201404      & cldfra_i, flwc_i, fiwc_i, ZQ_RAIN, ZQ_SNOW, & 
    13211405      & ref_liq_i, ref_ice_i, &
     
    13231407      & ZAEROSOL_OLD, ZAEROSOL, &
    13241408! Outputs
    1325 !       Net flux
    1326       & ZSWFT_i, ZLWFT_i, ZSWFT0_i, ZLWFT0_i, &
    1327 !       DN flux
     1409!       Net flux :
     1410      & ZSWFT_i, ZLWFT_i, ZSWFT0_ii, ZLWFT0_ii, &
     1411!       DWN flux :
    13281412      & ZFSDWN_i, ZFLUX_i(:,2,:), ZFCDWN_i, ZFLUC_i(:,2,:), &
    1329 !       UP flux
     1413!       UP flux :
    13301414      & ZFSUP_i, ZFLUX_i(:,1,:), ZFCUP_i, ZFLUC_i(:,1,:), &
    1331 !       Surf Direct flux
     1415!       Surf Direct flux : ATTENTION
    13321416      & ZFLUX_DIR, ZFLUX_DIR_CLEAR, ZFLUX_DIR_INTO_SUN, &
    13331417!       UV and para flux
     
    13381422
    13391423      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
    13791442! ---------
    13801443! On retablit l'ordre des niveaux lmd pour les tableaux de sortie
     
    13821445! avec l ancien rayonnement AR4. Si nuit, fract=0 donc pas de
    13831446! 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'
    13861449      DO k=0,klev
    13871450         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)
    14041473         IF (ok_volcan) THEN
    1405             ZSWADAERO(i,k+1)=ZSWADAERO(i,k+1)*fract(i) !--NL
     1474            ZSWADAERO(i,k+1)=ZSWADAERO(i,klev+1-k)*fract(i) !--NL
    14061475         ENDIF
    14071476         
    14081477!   Nouveau calcul car visiblement ZSWFT et ZSWFC sont nuls dans RRTM cy32
    14091478!   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)
    14141484         ENDDO
    14151485      ENDDO
     
    14351505      !--fraction of diffuse radiation in surface SW downward radiation
    14361506      DO i = 1, kdlon
    1437        IF (fract(i).GT.0.0) THEN
    14381507         zdir=SUM(PSFSWDIR(i,:))
    14391508         zdif=SUM(PSFSWDIF(i,:))
     1509       IF (fract(i).GT.0.0.and.(zdir+zdif).gt.seuilmach) THEN
    14401510         zsolswfdiff(i) = zdif/(zdir+zdif)
    14411511       ELSE  !--night
     
    15781648 ENDDO ! j = 1, nb_gr
    15791649
     1650IF (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
     1684ENDIF
     1685
    15801686END SUBROUTINE radlwsw
    15811687
Note: See TracChangeset for help on using the changeset viewer.