Changeset 2003


Ignore:
Timestamp:
Apr 4, 2014, 2:51:02 PM (10 years ago)
Author:
Laurent Fairhead
Message:

Nouvelle version qui inclut les effets des aérosols et propose les mêmes diagnostics des effets
directs et indirects que l'ancienne version du rayonnement.
OB


New RRTM version that includes the effects of aerosols and outputs the same direct and indirect effects
diagnostics as the old version
OB

Location:
LMDZ5/trunk/libf/phylmd
Files:
12 edited

Legend:

Unmodified
Added
Removed
  • LMDZ5/trunk/libf/phylmd/aero_mod.F90

    r1907 r2003  
    22!
    33MODULE aero_mod
    4   ! Declaration des indices pour les aerosols
     4! Declaration des indices pour les aerosols
    55
    6   ! Total number of aerosols
    7 !  INTEGER, PARAMETER :: naero_tot = 10
    8 !--STRAT AER
     6! 1/ Total number of aerosols for which an aerosol optical depth is provided
     7!--strat aerosols are only prescribed naero_tot = 10 ==> 11
     8
    99  INTEGER, PARAMETER :: naero_tot = 11
    1010
    11   ! Identification number used in aeropt_2bands and aeropt_5wv
    12   ! corresponding to naero_tot
     11! Identification number used in aeropt_2bands and aeropt_5wv
     12! corresponding to naero_tot
    1313  INTEGER, PARAMETER :: id_ASBCM    = 1
    1414  INTEGER, PARAMETER :: id_ASPOMM   = 2
     
    2121  INTEGER, PARAMETER :: id_AIBCM    = 9
    2222  INTEGER, PARAMETER :: id_AIPOMM   = 10
    23 !--STRAT AER
    24   INTEGER, PARAMETER :: id_strat   = 11
     23  INTEGER, PARAMETER :: id_STRAT   = 11
    2524
     25! Corresponding names for the aerosols
     26  CHARACTER(len=7),DIMENSION(naero_tot), PARAMETER :: name_aero_tau=(/&
     27       "ASBCM  ", &
     28       "ASPOMM ", &
     29       "SO4    ", &
     30       "CSSO4M ", &
     31       "SSSSM  ", &
     32       "CSSSM  ", &
     33       "ASSSM  ", &
     34       "CIDUSTM", &
     35       "AIBCM  ", &
     36       "AIPOMM ", &
     37       "STRAT  " /)
    2638
    27   ! Total number of aerosols actually used in LMDZ
    28   ! 1 =  ASBCM
    29   ! 2 =  ASPOMM
    30   ! 3 =  ASSO4M ( = SO4)
    31   ! 4 =  CSSO4M
    32   ! 5 =  SSSSM
    33   ! 6 =  CSSSM
    34   ! 7 =  ASSSM
    35   ! 8 =  CIDUSTM
    36   ! 9 =  AIBCM
    37   !10 =  AIPOMM
    38 !--STRAT AER
    39   !11 = aerosols stratos
    40 !  INTEGER, PARAMETER :: naero_spc = 10
    41   INTEGER, PARAMETER :: naero_spc = 11
     39! 2/ Total number of aerosols for which an aerosol mass is provided
    4240
    43   ! Corresponding names for the aerosols
     41  INTEGER, PARAMETER :: naero_spc = 10
     42
     43! Corresponding names for the aerosols
    4444  CHARACTER(len=7),DIMENSION(naero_spc), PARAMETER :: name_aero=(/&
    4545       "ASBCM  ", &
     
    5252       "CIDUSTM", &
    5353       "AIBCM  ", &
    54 !       "AIPOMM " /)
    55        "AIPOMM ", &
    56        "STRAT  " /)
     54       "AIPOMM " /)
    5755
    58 
    59   ! Number of aerosol groups
     56! 3/ Number of aerosol groups
     57  INTEGER, PARAMETER :: naero_grp = 9
    6058  ! 1 = ZERO   
    6159  ! 2 = AER total   
     
    6765  ! 8 = SS   
    6866  ! 9 = NO3   
    69   INTEGER, PARAMETER :: naero_grp = 9
    7067
    71   ! Number of  wavelengths
     68! Number of  wavelengths
    7269  INTEGER, PARAMETER :: nwave = 5
    7370
    74   ! Number of modes spectral bands
     71! Number of modes spectral bands
    7572  INTEGER, parameter :: nbands = 2
     73  INTEGER, parameter :: nbands_rrtm = 6
    7674
    7775END MODULE aero_mod
  • LMDZ5/trunk/libf/phylmd/aeropt_2bands.F90

    r1907 r2003  
    928928    ENDDO  ! nb_aer 
    929929
    930   DO m=1,nb_aer   
     930!correction bug OB
     931!  DO m=1,nb_aer   
     932  DO m=1,naero_tot   
    931933    IF (.NOT. used_aer(m)) THEN
    932934      tau_ae(:,:,m,:)=0.
  • LMDZ5/trunk/libf/phylmd/clesphys.h

    r1989 r2003  
    1818       REAL(kind=8) CH4_ppb, N2O_ppb, CFC11_ppt, CFC12_ppt
    1919!IM ajout CFMIP2/CMIP5
     20       REAL co2_ppm_per
    2021       LOGICAL ok_4xCO2atm
    2122       REAL(kind=8) RCO2_per,RCH4_per,RN2O_per,RCFC11_per,RCFC12_per
     
    7980       COMMON/clesphys/                                                 &
    8081! REAL FIRST
    81      &       co2_ppm, solaire                                           &
     82     &       co2_ppm, co2_ppm_per, solaire                              &
    8283     &     , RCO2, RCH4, RN2O, RCFC11, RCFC12                           &
    8384     &     , RCO2_act, RCH4_act, RN2O_act, RCFC11_act, RCFC12_act       &
  • LMDZ5/trunk/libf/phylmd/phys_local_var_mod.F90

    r1989 r2003  
    334334      allocate(topswcf_aero(klon,3), solswcf_aero(klon,3))
    335335      allocate(d_u_hin(klon,klev),d_v_hin(klon,klev),d_t_hin(klon,klev))
    336       allocate(tausum_aero(klon,nwave,naero_spc))
    337       allocate(tau3d_aero(klon,klev,nwave,naero_spc))
     336!      allocate(tausum_aero(klon,nwave,naero_spc))
     337!      allocate(tau3d_aero(klon,klev,nwave,naero_spc))
     338!--correction mini bug OB
     339      allocate(tausum_aero(klon,nwave,naero_tot))
     340      allocate(tau3d_aero(klon,klev,nwave,naero_tot))
    338341      allocate(scdnc(klon, klev))
    339342      allocate(cldncl(klon))
  • LMDZ5/trunk/libf/phylmd/phys_output_ctrlout_mod.F90

    r1971 r2003  
    33  USE phys_output_var_mod
    44  USE indice_sol_mod
    5   USE aero_mod, only : naero_spc,name_aero
     5  USE aero_mod, only : naero_tot,name_aero_tau
    66
    77
     
    723723    'solswai', 'AIE at SFR', 'W/m2', (/ ('', i=1, 9) /))
    724724
    725 !  type(ctrl_out),save,dimension(10) :: o_tausumaero  = (/ ctrl_out((/ 2, 6, 10, 10, 10, 10, 11, 11, 11 /),'OD550_ASBCM', &
    726 !    (/ ('', i=1, 9) /)), &
    727   type(ctrl_out),save,dimension(11) :: o_tausumaero  =                           &
     725  type(ctrl_out),save,dimension(naero_tot) :: o_tausumaero  =                           &
    728726    (/ ctrl_out((/ 2, 6, 10, 10, 10, 10, 11, 11, 11 /),'OD550_ASBCM',                        &
    729       "Aerosol Optical depth at 550 nm "//name_aero(1),"1", (/ ('', i=1, 9) /)), &
     727      "Aerosol Optical depth at 550 nm "//name_aero_tau(1),"1", (/ ('', i=1, 9) /)), &
    730728       ctrl_out((/ 2, 6, 10, 10, 10, 10, 11, 11, 11 /),'OD550_ASPOMM',                       &
    731       "Aerosol Optical depth at 550 nm "//name_aero(2),"1", (/ ('', i=1, 9) /)), &
     729      "Aerosol Optical depth at 550 nm "//name_aero_tau(2),"1", (/ ('', i=1, 9) /)), &
    732730       ctrl_out((/ 2, 6, 10, 10, 10, 10, 11, 11, 11 /),'OD550_ASSO4M',                       &
    733       "Aerosol Optical depth at 550 nm "//name_aero(3),"1", (/ ('', i=1, 9) /)), &
     731      "Aerosol Optical depth at 550 nm "//name_aero_tau(3),"1", (/ ('', i=1, 9) /)), &
    734732       ctrl_out((/ 2, 6, 10, 10, 10, 10, 11, 11, 11 /),'OD550_CSSO4M',                       &
    735       "Aerosol Optical depth at 550 nm "//name_aero(4),"1", (/ ('', i=1, 9) /)), &
     733      "Aerosol Optical depth at 550 nm "//name_aero_tau(4),"1", (/ ('', i=1, 9) /)), &
    736734       ctrl_out((/ 2, 6, 10, 10, 10, 10, 11, 11, 11 /),'OD550_SSSSM',                        &
    737       "Aerosol Optical depth at 550 nm "//name_aero(5),"1", (/ ('', i=1, 9) /)), &
     735      "Aerosol Optical depth at 550 nm "//name_aero_tau(5),"1", (/ ('', i=1, 9) /)), &
    738736       ctrl_out((/ 2, 6, 10, 10, 10, 10, 11, 11, 11 /),'OD550_ASSSM',                        &
    739       "Aerosol Optical depth at 550 nm "//name_aero(6),"1", (/ ('', i=1, 9) /)), &
     737      "Aerosol Optical depth at 550 nm "//name_aero_tau(6),"1", (/ ('', i=1, 9) /)), &
    740738       ctrl_out((/ 2, 6, 10, 10, 10, 10, 11, 11, 11 /),'OD550_CSSSM',                        &
    741       "Aerosol Optical depth at 550 nm "//name_aero(7),"1", (/ ('', i=1, 9) /)), &
     739      "Aerosol Optical depth at 550 nm "//name_aero_tau(7),"1", (/ ('', i=1, 9) /)), &
    742740       ctrl_out((/ 2, 6, 10, 10, 10, 10, 11, 11, 11 /),'OD550_CIDUSTM',                      &
    743       "Aerosol Optical depth at 550 nm "//name_aero(8),"1", (/ ('', i=1, 9) /)), &
     741      "Aerosol Optical depth at 550 nm "//name_aero_tau(8),"1", (/ ('', i=1, 9) /)), &
    744742       ctrl_out((/ 2, 6, 10, 10, 10, 10, 11, 11, 11 /),'OD550_AIBCM',                        &
    745       "Aerosol Optical depth at 550 nm "//name_aero(9),"1", (/ ('', i=1, 9) /)), &
     743      "Aerosol Optical depth at 550 nm "//name_aero_tau(9),"1", (/ ('', i=1, 9) /)), &
    746744       ctrl_out((/ 2, 6, 10, 10, 10, 10, 11, 11, 11 /),'OD550_AIPOMM',                       &
    747       "Aerosol Optical depth at 550 nm "//name_aero(10),"1", (/ ('', i=1, 9) /)),&
     745      "Aerosol Optical depth at 550 nm "//name_aero_tau(10),"1", (/ ('', i=1, 9) /)),&
    748746       ctrl_out((/ 2, 2, 10, 10, 10, 10, 11, 11, 11 /),'OD550_STRAT',                        &
    749       "Aerosol Optical depth at 550 nm "//name_aero(11),"1", (/ ('', i=1, 9) /)) /)
     747      "Aerosol Optical depth at 550 nm "//name_aero_tau(11),"1", (/ ('', i=1, 9) /)) /)
     748!
    750749  TYPE(ctrl_out), SAVE :: o_od550aer = ctrl_out((/ 2, 6, 10, 10, 10, 10, 11, 11, 11 /), &
    751750    'od550aer', 'Total aerosol optical depth at 550nm', '-', (/ ('', i=1, 9) /))
  • LMDZ5/trunk/libf/phylmd/phys_output_write_mod.F90

    r2002 r2003  
    1919       ok_ade, ok_aie, ivap, new_aod, ok_sync, &
    2020       ptconv, read_climoz, clevSTD, ptconvth, &
    21        d_t, qx, d_qx, zmasse, flag_aerosol_strat)
     21       d_t, qx, d_qx, zmasse, flag_aerosol, flag_aerosol_strat, ok_cdnc)
    2222
    2323    ! This subroutine does the actual writing of diagnostics that were
     
    223223    USE comgeomphy, only: airephy
    224224    USE surface_data, only: type_ocean, ok_veget, ok_snow
    225     USE aero_mod, only: naero_spc
     225!    USE aero_mod, only: naero_spc
     226    USE aero_mod, only: naero_tot
    226227    USE ioipsl, only: histend, histsync
    227228    USE iophy, only: set_itau_iophy, histwrite_phy
     
    260261    REAL, DIMENSION(klon, llm) :: zmasse
    261262    LOGICAL :: flag_aerosol_strat
     263    INTEGER :: flag_aerosol
     264    LOGICAL :: ok_cdnc
    262265    REAL, DIMENSION(3) :: freq_moyNMC
    263266
     
    771774       ! OD550 per species
    772775       IF (new_aod .and. (.not. aerosol_couple)) THEN
    773           IF (ok_ade.OR.ok_aie) THEN
     776          IF (flag_aerosol.GT.0) THEN
    774777             CALL histwrite_phy(o_od550aer, od550aer)
    775778             CALL histwrite_phy(o_od865aer, od865aer)
     
    793796             !--STRAT AER
    794797          ENDIF
    795           IF (ok_ade.OR.ok_aie.OR.flag_aerosol_strat) THEN
    796              DO naero = 1, naero_spc
     798          IF (flag_aerosol.GT.0.OR.flag_aerosol_strat) THEN
     799!             DO naero = 1, naero_spc
     800!--correction mini bug OB
     801             DO naero = 1, naero_tot
    797802                CALL histwrite_phy(o_tausumaero(naero), &
    798803                     tausum_aero(:,2,naero) )
     
    831836          CALL histwrite_phy(o_topswai, topswai_aero)
    832837          CALL histwrite_phy(o_solswai, solswai_aero)
     838       ENDIF
     839       IF (flag_aerosol.GT.0.AND.ok_cdnc) THEN
    833840          CALL histwrite_phy(o_scdnc, scdnc)
    834841          CALL histwrite_phy(o_cldncl, cldncl)
  • LMDZ5/trunk/libf/phylmd/phys_state_var_mod.F90

    r1938 r2003  
    349349      REAL,SAVE,ALLOCATABLE :: tau_aero(:,:,:,:), piz_aero(:,:,:,:), cg_aero(:,:,:,:)
    350350!$OMP THREADPRIVATE(tau_aero, piz_aero, cg_aero)
     351      REAL,SAVE,ALLOCATABLE :: tau_aero_rrtm(:,:,:,:), piz_aero_rrtm(:,:,:,:), cg_aero_rrtm(:,:,:,:)
     352!$OMP THREADPRIVATE(tau_aero_rrtm, piz_aero_rrtm, cg_aero_rrtm)
    351353      REAL,SAVE,ALLOCATABLE :: ccm(:,:,:)
    352354!$OMP THREADPRIVATE(ccm)
     
    517519      ALLOCATE(topswai(klon), solswai(klon))
    518520      ALLOCATE(tau_aero(klon,klev,naero_grp,nbands),piz_aero(klon,klev,naero_grp,nbands),cg_aero(klon,klev,naero_grp,nbands))
     521      ALLOCATE(tau_aero_rrtm(klon,klev,2,nbands_rrtm),piz_aero_rrtm(klon,klev,2,nbands_rrtm))
     522      ALLOCATE(cg_aero_rrtm(klon,klev,2,nbands_rrtm))
    519523      ALLOCATE(ccm(klon,klev,nbands))
    520524
     
    631635      deallocate(topswai, solswai)
    632636      deallocate(tau_aero,piz_aero,cg_aero)
     637      deallocate(tau_aero_rrtm,piz_aero_rrtm,cg_aero_rrtm)
    633638      deallocate(ccm)
    634639      if (ok_gwd_rando) deallocate(du_gwd_rando, dv_gwd_rando)
  • LMDZ5/trunk/libf/phylmd/physiq.F90

    r1998 r2003  
    5252  USE indice_sol_mod
    5353  USE phytrac_mod, ONLY : phytrac
     54
     55  USE YOERAD   , ONLY : NRADLP
    5456
    5557  !IM stations CFMIP
     
    26972699     !jq - Johannes Quaas, 27/11/2003 (quaas@lmd.jussieu.fr)
    26982700     IF (flag_aerosol .gt. 0) THEN
    2699         IF (.NOT. aerosol_couple) &
     2701        IF (.NOT. aerosol_couple) THEN
     2702           IF (iflag_rrtm .EQ. 0) THEN !--old radiation
     2703!
    27002704             CALL readaerosol_optic( &
    27012705             debut, new_aod, flag_aerosol, itap, jD_cur-jD_ref, &
     
    27042708             tau_aero, piz_aero, cg_aero,  &
    27052709             tausum_aero, tau3d_aero)
     2710!
     2711           ELSE                       ! RRTM radiation
     2712!
     2713             CALL readaerosol_optic_rrtm( &
     2714             debut, new_aod, flag_aerosol, itap, jD_cur-jD_ref, &
     2715             pdtphys, pplay, paprs, t_seri, rhcl, presnivs,  &
     2716             mass_solu_aero, mass_solu_aero_pi,  &
     2717             tau_aero_rrtm, piz_aero_rrtm, cg_aero_rrtm,  &
     2718             tausum_aero, tau3d_aero)
     2719!
     2720           ENDIF
     2721        ENDIF
    27062722     ELSE
    27072723        tausum_aero(:,:,:) = 0.
    2708         tau_aero(:,:,:,:) = 0.
    2709         piz_aero(:,:,:,:) = 0.
    2710         cg_aero(:,:,:,:)  = 0.
     2724        IF (iflag_rrtm .EQ. 0) THEN !--old radiation
     2725          tau_aero(:,:,:,:) = 0.
     2726          piz_aero(:,:,:,:) = 0.
     2727          cg_aero(:,:,:,:)  = 0.
     2728        ELSE
     2729          tau_aero_rrtm(:,:,:,:)=0.0
     2730          piz_aero_rrtm(:,:,:,:)=0.0
     2731          cg_aero_rrtm(:,:,:,:)=0.0
     2732        ENDIF
    27112733     ENDIF
    27122734     !
     
    27152737     IF (flag_aerosol_strat) THEN
    27162738        PRINT *,'appel a readaerosolstrat', mth_cur
    2717         CALL readaerosolstrato(debut)
     2739        IF (iflag_rrtm.EQ.0) THEN
     2740         CALL readaerosolstrato(debut)
     2741        ELSE
     2742         CALL readaerosolstrato_rrtm(debut)
     2743        ENDIF
    27182744     ENDIF
    27192745     !--fin STRAT AEROSOL
     
    29342960
    29352961  if (ok_newmicro) then
     2962     IF (iflag_rrtm.NE.0.AND.ok_cdnc.AND.NRADLP.NE.3) THEN
     2963      PRINT *,'RRTM choix incoherent NRADLP doit etre egal a 3 pour ok_cdnc'
     2964      STOP
     2965     ENDIF
    29362966     CALL newmicro (ok_cdnc, bl95_b0, bl95_b1, &
    29372967          paprs, pplay, t_seri, cldliq, cldfra, &
     
    30753105             flag_aerosol_strat, &
    30763106             tau_aero, piz_aero, cg_aero, &
     3107             tau_aero_rrtm, piz_aero_rrtm, cg_aero_rrtm,&     ! Rajoute par OB pour RRTM
    30773108             cldtaupirad,new_aod, &
    30783109             zqsat, flwc, fiwc, &
     
    31213152                   flag_aerosol_strat, &
    31223153                   tau_aero, piz_aero, cg_aero, &
     3154                   tau_aero_rrtm, piz_aero_rrtm, cg_aero_rrtm,&     ! Rajoute par OB pour RRTM
    31233155                   cldtaupi,new_aod, &
    31243156                   zqsat, flwc, fiwc, &
     
    37463778       ptconv, read_climoz, clevSTD,                   &
    37473779       ptconvth, d_t, qx, d_qx, zmasse,                &
    3748        flag_aerosol_strat)
     3780       flag_aerosol, flag_aerosol_strat, ok_cdnc)
    37493781
    37503782
  • LMDZ5/trunk/libf/phylmd/radlwsw_m.F90

    • Property svn:keywords set to Author Date Id Revi
    r1991 r2003  
     1!
     2! $Id$
     3!
    14module radlwsw_m
    25
     
    1316   flag_aerosol_strat,&
    1417   tau_aero, piz_aero, cg_aero,&
     18   tau_aero_rrtm, piz_aero_rrtm, cg_aero_rrtm,& ! rajoute par OB pour RRTM
    1519   cldtaupi, new_aod, &
    1620   qsat, flwc, fiwc, &
     
    177181  REAL,    INTENT(in)  :: piz_aero(KLON,KLEV,9,2)                        ! aerosol optical properties (see aeropt.F)
    178182  REAL,    INTENT(in)  :: cg_aero(KLON,KLEV,9,2)                         ! aerosol optical properties (see aeropt.F)
     183!--OB
     184  REAL,    INTENT(in)  :: tau_aero_rrtm(KLON,KLEV,2,NSW)                 ! aerosol optical properties RRTM
     185  REAL,    INTENT(in)  :: piz_aero_rrtm(KLON,KLEV,2,NSW)                 ! aerosol optical properties RRTM
     186  REAL,    INTENT(in)  :: cg_aero_rrtm(KLON,KLEV,2,NSW)                  ! aerosol optical properties RRTM
     187!--OB fin
    179188  REAL,    INTENT(in)  :: cldtaupi(KLON,KLEV)                            ! cloud optical thickness for pre-industrial aerosol concentrations
    180189  LOGICAL, INTENT(in)  :: new_aod                                        ! flag pour retrouver les resultats exacts de l'AR4 dans le cas ou l'on ne travaille qu'avec les sulfates
     
    273282      REAL(KIND=8) ref_liq_i(klon,klev) ! cloud droplet radius present-day from newmicro (inverted)
    274283      REAL(KIND=8) ref_ice_i(klon,klev) ! ice crystal radius present-day from newmicro (inverted)
     284!--OB
     285      REAL(KIND=8) ref_liq_pi_i(klon,klev) ! cloud droplet radius pre-industrial from newmicro (inverted)
     286      REAL(KIND=8) ref_ice_pi_i(klon,klev) ! ice crystal radius pre-industrial from newmicro (inverted)
     287!--end OB
    275288      REAL(KIND=8) paprs_i(klon,klev+1)
    276289      REAL(KIND=8) pplay_i(klon,klev)
     
    297310      REAL(KIND=8) ZSWFT (klon,klev+1),ZSWFT_i (klon,klev+1)
    298311      REAL(KIND=8) ZFLUCDWN_i(klon,klev+1),ZFLUCUP_i(klon,klev+1)
    299       REAL(KIND=8) PPIZA_DST(klon,klev,NSW)
    300       REAL(KIND=8) PCGA_DST(klon,klev,NSW)
    301       REAL(KIND=8) PTAUREL_DST(klon,klev,NSW)
     312      REAL(KIND=8) PPIZA_TOT(klon,klev,NSW)
     313      REAL(KIND=8) PCGA_TOT(klon,klev,NSW)
     314      REAL(KIND=8) PTAU_TOT(klon,klev,NSW)
     315      REAL(KIND=8) PPIZA_NAT(klon,klev,NSW)
     316      REAL(KIND=8) PCGA_NAT(klon,klev,NSW)
     317      REAL(KIND=8) PTAU_NAT(klon,klev,NSW)
    302318      REAL(KIND=8) PSFSWDIR(klon,NSW)
    303319      REAL(KIND=8) PSFSWDIF(klon,NSW)
     
    319335!      REAL(KIND=8) SUN_FRACT(2)
    320336  real, parameter:: dobson_u = 2.1415e-05 ! Dobson unit, in kg m-2
    321 !--OB
    322       REAL tau(6), alt, zdz, zrho
    323       character (len=20) :: modname='radlwsw'
    324       character (len=80) :: abort_message
     337  CHARACTER (LEN=80) :: abort_message
     338  CHARACTER (LEN=80) :: modname='radlwsw_m'
    325339
    326340  call assert(size(wo, 1) == klon, size(wo, 2) == klev, "radlwsw wo")
     
    621635      ENDDO
    622636      ENDDO
    623 !     
    624 !--OB Valeurs de tau(NSW) calculees par O.Boucher (MPL 20130417)
    625 !-- voir aod_2bands.F90, aod_4bands.F90, aod_6bands.F90 dans BENCH48x36x19
    626       SELECT CASE (NSW)
    627       CASE (2)
    628        tau(1)=0.22017828
    629        tau(2)=0.110565394
    630       CASE (4)
    631        tau(1)=0.22017743
    632        tau(2)=0.12738435
    633        tau(3)=0.07157799
    634        tau(4)=0.03301198
    635       CASE (6)
    636        tau(1)=0.49999997
    637        tau(2)=0.28593913
    638        tau(3)=0.20057647
    639        tau(4)=0.12738435
    640        tau(5)=0.07157799
    641        tau(6)=0.03301198
    642       END SELECT
    643 !     tau1=0.2099  ! anciennes valeurs de Nicolas Huneeus (20130326)
    644 !     tau2=0.1022
    645 !     tau(1)=1.0e-15
    646 !     tau(2)=1.0e-15
    647 !     tau(3)=1.0e-15
    648 !     tau(4)=1.0e-15
    649 !     tau(5)=1.0e-15
    650 !     tau(6)=1.0e-15
    651       print *,'Radlwsw: NSW tau= ',NSW,tau(:)
    652       DO i = 1, kdlon
    653       alt=0.0
     637!
     638!--OB
     639!--aerosol TOT  - anthropogenic+natural
     640!--aerosol NAT  - natural only
     641!
     642      DO i = 1, kdlon
    654643      DO k = 1, kflev
    655       zrho=pplay(i,k)/t(i,k)/RD
    656       zdz=(paprs(i,k)-paprs(i,k+1))/zrho/RG
    657644      DO kk=1, NSW
    658       PTAUREL_DST(i,kflev+1-k,kk)=(tau(kk)/2000.0)*max(0.0,min(zdz,2000.0-alt))
    659       PTAUREL_DST(i,kflev+1-k,kk)=MAX(PTAUREL_DST(i,kflev+1-k,kk), 1e-15)
    660       ENDDO
    661       alt=alt+zdz
    662       ENDDO
    663       ENDDO
    664 
    665 !
    666       DO k = 1, kflev
    667       DO i = 1, kdlon
    668       DO kk = 1, NSW
    669 !     PPIZA_DST(i,k,kk)=1.0   
    670       PPIZA_DST(i,k,kk)=0.8   
    671       PCGA_DST(i,k,kk)=0.7
    672       ENDDO
    673       ENDDO
    674       ENDDO
     645!
     646      PTAU_TOT(i,kflev+1-k,kk)=tau_aero_rrtm(i,k,2,kk)
     647      PPIZA_TOT(i,kflev+1-k,kk)=piz_aero_rrtm(i,k,2,kk)
     648      PCGA_TOT(i,kflev+1-k,kk)=cg_aero_rrtm(i,k,2,kk)
     649!
     650      PTAU_NAT(i,kflev+1-k,kk)=tau_aero_rrtm(i,k,1,kk)
     651      PPIZA_NAT(i,kflev+1-k,kk)=piz_aero_rrtm(i,k,1,kk)
     652      PCGA_NAT(i,kflev+1-k,kk)=cg_aero_rrtm(i,k,1,kk)
     653!
     654      ENDDO
     655      ENDDO
     656      ENDDO
     657!-end OB
     658!
    675659!     
    676660      DO i = 1, kdlon
     
    707691            ref_liq_i(1:klon,k) =ref_liq(1:klon,klev+1-k)
    708692            ref_ice_i(1:klon,k) =ref_ice(1:klon,klev+1-k)
     693!-OB
     694            ref_liq_pi_i(1:klon,k) =ref_liq_pi(1:klon,klev+1-k)
     695            ref_ice_pi_i(1:klon,k) =ref_ice_pi(1:klon,klev+1-k)
    709696         enddo
    710697         do k=1,kflev
     
    762749
    763750! Nouvel appel a RECMWF (celui du cy32t0)
    764          CALL RECMWF (ist , iend, klon , ktdia  , klev   , kmode ,&
     751         CALL RECMWF_AERO (ist , iend, klon , ktdia  , klev   , kmode ,&
    765752         PALBD_NEW,PALBP_NEW, paprs_i , pplay_i , RCO2   , cldfra_i,&
    766753         POZON_i  , PAER_i  , PDP_i   , PEMIS   , rmu0   ,&
    767754          q_i     , qsat_i  , fiwc_i  , flwc_i  , zmasq  , t_i  ,tsol,&
    768755         ref_liq_i, ref_ice_i, &
     756         ref_liq_pi_i, ref_ice_pi_i, &   ! rajoute par OB pour diagnostiquer effet indirect
    769757         ZEMTD_i  , ZEMTU_i , ZTRSO_i ,&
    770758         ZTH_i    , ZCTRSO  , ZCEMTR  , ZTRSOD  ,&
    771759         ZLWFC    , ZLWFT_i , ZSWFC   , ZSWFT_i ,&
    772760         PSFSWDIR , PSFSWDIF, PFSDNN  , PFSDNV  ,&
    773          PPIZA_DST, PCGA_DST,PTAUREL_DST,ZFLUX_i  , ZFLUC_i ,&
    774          ZFSDWN_i , ZFSUP_i , ZFCDWN_i, ZFCUP_i)
     761         PPIZA_TOT, PCGA_TOT,PTAU_TOT,&
     762         PPIZA_NAT, PCGA_NAT,PTAU_NAT,           &  ! rajoute par OB pour diagnostiquer effet direct
     763         ZFLUX_i  , ZFLUC_i ,&
     764         ZFSDWN_i , ZFSUP_i , ZFCDWN_i, ZFCUP_i,&
     765         ZTOPSWADAERO,ZSOLSWADAERO,&  ! rajoute par OB pour diagnostics
     766         ZTOPSWAD0AERO,ZSOLSWAD0AERO,&
     767         ZTOPSWAIAERO,ZSOLSWAIAERO, &
     768         ZTOPSWCF_AERO,ZSOLSWCF_AERO, &
     769         ok_ade, ok_aie, flag_aerosol,flag_aerosol_strat) ! flags aerosols
    775770           
    776771         print *,'RADLWSW: apres RECMWF'
     
    791786        CALL writefield_phy('pfsdnn',PFSDNN,1)
    792787        CALL writefield_phy('pfsdnv',PFSDNV,1)
    793         CALL writefield_phy('ppiza_dst',PPIZA_DST,klev)
    794         CALL writefield_phy('pcga_dst',PCGA_DST,klev)
    795         CALL writefield_phy('ptaurel_dst',PTAUREL_DST,klev)
     788        CALL writefield_phy('ppiza_dst',PPIZA_TOT,klev)
     789        CALL writefield_phy('pcga_dst',PCGA_TOT,klev)
     790        CALL writefield_phy('ptaurel_dst',PTAU_TOT,klev)
    796791        CALL writefield_phy('zflux_i',ZFLUX_i,klev+1)
    797792        CALL writefield_phy('zfluc_i',ZFLUC_i,klev+1)
     
    813808!  ZSWFC        (KPROMA,2)       ; CLEAR-SKY SHORTWAVE FLUXES
    814809!  ZSWFT        (KPROMA,KLEV+1)  ; TOTAL-SKY SHORTWAVE FLUXES
    815 !  PPIZA_DST    (KPROMA,KLEV,NSW); Single scattering albedo of dust
    816 !  PCGA_DST     (KPROMA,KLEV,NSW); Assymetry factor for dust
    817 !  PTAUREL_DST  (KPROMA,KLEV,NSW); Optical depth of dust relative to at 550nm
     810!  PPIZA_TOT    (KPROMA,KLEV,NSW); Single scattering albedo of total aerosols
     811!  PCGA_TOT     (KPROMA,KLEV,NSW); Assymetry factor for total aerosols
     812!  PTAU_TOT     (KPROMA,KLEV,NSW); Optical depth of total aerosols
     813!  PPIZA_NAT    (KPROMA,KLEV,NSW); Single scattering albedo of natural aerosols
     814!  PCGA_NAT     (KPROMA,KLEV,NSW); Assymetry factor for natural aerosols
     815!  PTAU_NAT     (KPROMA,KLEV,NSW); Optical depth of natiral aerosols
    818816!  PSFSWDIR     (KPROMA,NSW)     ;
    819817!  PSFSWDIF     (KPROMA,NSW)     ;
     
    854852         ENDDO
    855853      ENDDO
     854
     855!--ajout OB
     856      ZTOPSWADAERO(:) =ZTOPSWADAERO(:) *fract(:)
     857      ZSOLSWADAERO(:) =ZSOLSWADAERO(:) *fract(:)
     858      ZTOPSWAD0AERO(:)=ZTOPSWAD0AERO(:)*fract(:)
     859      ZSOLSWAD0AERO(:)=ZSOLSWAD0AERO(:)*fract(:)
     860      ZTOPSWAIAERO(:) =ZTOPSWAIAERO(:) *fract(:)
     861      ZSOLSWAIAERO(:) =ZSOLSWAIAERO(:) *fract(:)
     862      ZTOPSWCF_AERO(:,1)=ZTOPSWCF_AERO(:,1)*fract(:)
     863      ZTOPSWCF_AERO(:,2)=ZTOPSWCF_AERO(:,2)*fract(:)
     864      ZTOPSWCF_AERO(:,3)=ZTOPSWCF_AERO(:,3)*fract(:)
     865      ZSOLSWCF_AERO(:,1)=ZSOLSWCF_AERO(:,1)*fract(:)
     866      ZSOLSWCF_AERO(:,2)=ZSOLSWCF_AERO(:,2)*fract(:)
     867      ZSOLSWCF_AERO(:,3)=ZSOLSWCF_AERO(:,3)*fract(:)
    856868
    857869!     print*,'SW_RRTM ZFSDN0 1 , klev:',ZFSDN0(1:klon,1),ZFSDN0(1:klon,klev)
  • LMDZ5/trunk/libf/phylmd/readaerosol_optic.F90

    • Property svn:keywords set to Author Date Id Revision
    r1907 r2003  
    4040  REAL, DIMENSION(klon,klev,naero_grp,nbands), INTENT(OUT) :: piz_aero    ! Single scattering albedo aerosol
    4141  REAL, DIMENSION(klon,klev,naero_grp,nbands), INTENT(OUT) :: cg_aero     ! asymmetry parameter aerosol
    42   REAL, DIMENSION(klon,nwave,naero_spc), INTENT(OUT)       :: tausum_aero
    43   REAL, DIMENSION(klon,klev,nwave,naero_spc), INTENT(OUT)  :: tau3d_aero
     42!  REAL, DIMENSION(klon,nwave,naero_spc), INTENT(OUT)       :: tausum_aero
     43!  REAL, DIMENSION(klon,klev,nwave,naero_spc), INTENT(OUT)  :: tau3d_aero
     44!--correction mini bug OB
     45  REAL, DIMENSION(klon,nwave,naero_tot), INTENT(OUT)       :: tausum_aero
     46  REAL, DIMENSION(klon,klev,nwave,naero_tot), INTENT(OUT)  :: tau3d_aero
    4447
    4548! Local variables
  • LMDZ5/trunk/libf/phylmd/rrtm/rrtm_taumol1.F90

    r1990 r2003  
    189189
    190190IF (LHOOK) CALL DR_HOOK('RRTM_TAUMOL1',0,ZHOOK_HANDLE)
     191!--ajout OB
     192IF (K_LAYTROP.GT.100) THEN
     193PRINT *,'ATTENTION KLAY_TROP > 100 PROBLEME ARRAY DANS RRTM ON ARRETE'
     194STOP
     195!--fin ajout OB
     196ENDIF
    191197DO I_LAY = 1, K_LAYTROP
    192198  IND0(I_LAY) = ((K_JP(I_LAY)-1)*5+(K_JT(I_LAY)-1))*NSPA(1) + 1
  • LMDZ5/trunk/libf/phylmd/rrtm/swclr.F90

    r1990 r2003  
    55 & PRK   , PRMU0 , PTAUAZ, PTRA1 , PTRA2 , PTRCLR, &
    66!++MODIFCODE
    7   & LRDUST,PPIZA_DST, PCGA_DST, PTAUREL_DST )
     7  & LDDUST,PPIZA_DST, PCGA_DST, PTAU_DST )
    88!--MODIFCODE
    99
     
    5858!        Y.Seity 05-10-10 : add add 3 optional arg. for dust SW properties
    5959!        Y.Seity 06-09-09 : add modset from O.Thouron (MesoNH) under NOVLP tests
     60!        O.Boucher fev.2014: modification sur les aerosols pour utiliser les variables DST
    6061!     ------------------------------------------------------------------
    6162
     
    7172
    7273IMPLICIT NONE
    73 
    74 include "clesphys.h"
     74INCLUDE "clesphys.h"
    7575
    7676INTEGER(KIND=JPIM),INTENT(IN)    :: KLON
     
    8686REAL(KIND=JPRB)   ,INTENT(IN)    :: PSEC(KLON)
    8787!++MODIFCODE
    88 LOGICAL           ,INTENT(IN)    :: LRDUST                   ! flag for DUST
     88LOGICAL           ,INTENT(IN)    :: LDDUST                   ! flag for DUST
    8989REAL(KIND=JPRB)   ,INTENT(IN)    :: PPIZA_DST(KLON,KLEV)
    9090REAL(KIND=JPRB)   ,INTENT(IN)    :: PCGA_DST(KLON,KLEV)
    91 REAL(KIND=JPRB)   ,INTENT(IN)    :: PTAUREL_DST(KLON,KLEV)
     91REAL(KIND=JPRB)   ,INTENT(IN)    :: PTAU_DST(KLON,KLEV)
    9292!--MODIFCODE
    9393REAL(KIND=JPRB)   ,INTENT(OUT)   :: PCGAZ(KLON,KLEV)
     
    157157
    158158!++MODIFCODE 
     159!--OB on fait passer les aerosols LMDZ dans la variable DST
    159160  IF(NOVLP < 5)THEN !ECMWF VERSION
    160   DO JAE=1,6
     161!  DO JAE=1,6
    161162      DO JL = KIDIA,KFDIA
    162         PTAUAZ(JL,JK)=PTAUAZ(JL,JK)+PAER(JL,JAE,IKL)*RTAUA(KNU,JAE)
    163         PPIZAZ(JL,JK)=PPIZAZ(JL,JK)+PAER(JL,JAE,IKL)&
    164          & * RTAUA(KNU,JAE)*RPIZA(KNU,JAE) 
    165         PCGAZ(JL,JK) =  PCGAZ(JL,JK) +PAER(JL,JAE,IKL)&
    166          & * RTAUA(KNU,JAE)*RPIZA(KNU,JAE)*RCGA(KNU,JAE) 
     163!        PTAUAZ(JL,JK)=PTAUAZ(JL,JK)+PAER(JL,JAE,IKL)*RTAUA(KNU,JAE)
     164        PTAUAZ(JL,JK)=PTAU_DST(JL,IKL)
     165!        PPIZAZ(JL,JK)=PPIZAZ(JL,JK)+PAER(JL,JAE,IKL)&
     166!         & * RTAUA(KNU,JAE)*RPIZA(KNU,JAE) 
     167        PPIZAZ(JL,JK)=PTAU_DST(JL,IKL)*PPIZA_DST(JL,IKL)
     168!        PCGAZ(JL,JK) =  PCGAZ(JL,JK) +PAER(JL,JAE,IKL)&
     169!         & * RTAUA(KNU,JAE)*RPIZA(KNU,JAE)*RCGA(KNU,JAE) 
     170        PCGAZ(JL,JK)=PTAU_DST(JL,IKL)*PPIZA_DST(JL,IKL)*PCGA_DST(JL,IKL)
    167171      ENDDO
    168     ENDDO
     172!    ENDDO
    169173  ELSE ! MESONH VERSION
    170      DO JAE=1,6
     174!--OB on utilise directement les aerosols LMDZ
     175!     DO JAE=1,6
    171176        DO JL = KIDIA,KFDIA
    172177           !Special optical properties for dust
    173            IF (LRDUST.AND.(JAE==3)) THEN
     178!           IF (LDDUST.AND.(JAE==3)) THEN
    174179           !Ponderation of aerosol optical properties:first step
    175180           !ti
    176             PTAUAZ(JL,JK)=PTAUAZ(JL,JK) + PAER(JL,JAE,IKL) * PTAUREL_DST(JL,IKL)
     181!            PTAUAZ(JL,JK)=PTAUAZ(JL,JK) + PAER(JL,JAE,IKL) * PTAUREL_DST(JL,IKL)
     182            PTAUAZ(JL,JK)= PTAU_DST(JL,IKL)
    177183           !wi*ti
    178              PPIZAZ(JL,JK)=PPIZAZ(JL,JK) + PAER(JL,JAE,IKL)  &
    179                    & *PTAUREL_DST(JL,IKL)*PPIZA_DST(JL,IKL)
     184!             PPIZAZ(JL,JK)=PPIZAZ(JL,JK) + PAER(JL,JAE,IKL)  &
     185!                   & *PTAUREL_DST(JL,IKL)*PPIZA_DST(JL,IKL)
     186             PPIZAZ(JL,JK)=PTAU_DST(JL,IKL)*PPIZA_DST(JL,IKL)
    180187           !wi*ti*gi
    181              PCGAZ(JL,JK) = PCGAZ(JL,JK) + PAER(JL,JAE,IKL) &
    182                 &  *PTAUREL_DST(JL,IKL)*PPIZA_DST(JL,IKL)*PCGA_DST(JL,IKL)
     188!             PCGAZ(JL,JK) = PCGAZ(JL,JK) + PAER(JL,JAE,IKL) &
     189!                &  *PTAUREL_DST(JL,IKL)*PPIZA_DST(JL,IKL)*PCGA_DST(JL,IKL)
     190             PCGAZ(JL,JK) = PTAU_DST(JL,IKL)*PPIZA_DST(JL,IKL)*PCGA_DST(JL,IKL)
    183191           !wi*ti*(gi**2)
    184              ZFACOA_NEW(JL,JK)= ZFACOA_NEW(JL,JK)+PAER(JL, JAE, IKL)&
    185                 & *PTAUREL_DST(JL,IKL) *PPIZA_DST(JL,IKL)*PCGA_DST(JL,IKL)*&
     192!             ZFACOA_NEW(JL,JK)= ZFACOA_NEW(JL,JK)+PAER(JL, JAE, IKL)&
     193!                & *PTAUREL_DST(JL,IKL) *PPIZA_DST(JL,IKL)*PCGA_DST(JL,IKL)*&
     194!                & PCGA_DST(JL,IKL)
     195             ZFACOA_NEW(JL,JK)= ZFACOA_NEW(JL,JK)+&
     196                & PTAU_DST(JL,IKL) *PPIZA_DST(JL,IKL)*PCGA_DST(JL,IKL)*&
    186197                & PCGA_DST(JL,IKL)
    187            ELSE
     198!           ELSE
    188199           !Ponderation of aerosol optical properties:first step
    189200           !ti
    190              PTAUAZ(JL,JK)=PTAUAZ(JL,JK)+PAER(JL, JAE, IKL)*RTAUA(KNU,JAE)
     201!             PTAUAZ(JL,JK)=PTAUAZ(JL,JK)+PAER(JL, JAE, IKL)*RTAUA(KNU,JAE)
    191202           !wi*ti
    192              PPIZAZ(JL,JK)=PPIZAZ(JL,JK)+PAER(JL, JAE, IKL)&
    193                 &* RTAUA(KNU,JAE)*RPIZA(KNU,JAE)
     203!             PPIZAZ(JL,JK)=PPIZAZ(JL,JK)+PAER(JL, JAE, IKL)&
     204!                &* RTAUA(KNU,JAE)*RPIZA(KNU,JAE)
    194205           !wi*ti*gi
    195              PCGAZ(JL,JK) =  PCGAZ(JL,JK) +PAER(JL, JAE, IKL)&
    196                 &* RTAUA(KNU,JAE)*RPIZA(KNU,JAE)*RCGA(KNU,JAE)
     206!             PCGAZ(JL,JK) =  PCGAZ(JL,JK) +PAER(JL, JAE, IKL)&
     207!                &* RTAUA(KNU,JAE)*RPIZA(KNU,JAE)*RCGA(KNU,JAE)
    197208           !wi*ti*(gi**2)
    198              ZFACOA_NEW(JL,JK)= ZFACOA_NEW(JL,JK)+PAER(JL, JAE, IKL)&
    199                 &* RTAUA(KNU,JAE)*RPIZA(KNU,JAE)*RCGA(KNU,JAE)*RCGA(KNU,JAE)
    200            ENDIF
     209!             ZFACOA_NEW(JL,JK)= ZFACOA_NEW(JL,JK)+PAER(JL, JAE, IKL)&
     210!                &* RTAUA(KNU,JAE)*RPIZA(KNU,JAE)*RCGA(KNU,JAE)*RCGA(KNU,JAE)
     211!           ENDIF
    201212        ENDDO
    202      ENDDO
     213!     ENDDO
    203214  ENDIF
    204215!--MODIFCODE 
Note: See TracChangeset for help on using the changeset viewer.