Index: /LMDZ5/trunk/libf/phylmd/aero_mod.F90
===================================================================
--- /LMDZ5/trunk/libf/phylmd/aero_mod.F90	(revision 2002)
+++ /LMDZ5/trunk/libf/phylmd/aero_mod.F90	(revision 2003)
@@ -2,13 +2,13 @@
 !
 MODULE aero_mod
-  ! Declaration des indices pour les aerosols 
+! Declaration des indices pour les aerosols 
 
-  ! Total number of aerosols
-!  INTEGER, PARAMETER :: naero_tot = 10 
-!--STRAT AER
+! 1/ Total number of aerosols for which an aerosol optical depth is provided
+!--strat aerosols are only prescribed naero_tot = 10 ==> 11 
+
   INTEGER, PARAMETER :: naero_tot = 11
 
-  ! Identification number used in aeropt_2bands and aeropt_5wv
-  ! corresponding to naero_tot
+! Identification number used in aeropt_2bands and aeropt_5wv
+! corresponding to naero_tot
   INTEGER, PARAMETER :: id_ASBCM    = 1
   INTEGER, PARAMETER :: id_ASPOMM   = 2
@@ -21,25 +21,25 @@
   INTEGER, PARAMETER :: id_AIBCM    = 9
   INTEGER, PARAMETER :: id_AIPOMM   = 10
-!--STRAT AER
-  INTEGER, PARAMETER :: id_strat   = 11
+  INTEGER, PARAMETER :: id_STRAT   = 11
 
+! Corresponding names for the aerosols
+  CHARACTER(len=7),DIMENSION(naero_tot), PARAMETER :: name_aero_tau=(/&
+       "ASBCM  ", &
+       "ASPOMM ", &
+       "SO4    ", &
+       "CSSO4M ", &
+       "SSSSM  ", &
+       "CSSSM  ", &
+       "ASSSM  ", &
+       "CIDUSTM", &
+       "AIBCM  ", &
+       "AIPOMM ", &
+       "STRAT  " /)
 
-  ! Total number of aerosols actually used in LMDZ 
-  ! 1 =  ASBCM
-  ! 2 =  ASPOMM
-  ! 3 =  ASSO4M ( = SO4) 
-  ! 4 =  CSSO4M 
-  ! 5 =  SSSSM 
-  ! 6 =  CSSSM
-  ! 7 =  ASSSM
-  ! 8 =  CIDUSTM
-  ! 9 =  AIBCM
-  !10 =  AIPOMM
-!--STRAT AER
-  !11 = aerosols stratos
-!  INTEGER, PARAMETER :: naero_spc = 10
-  INTEGER, PARAMETER :: naero_spc = 11
+! 2/ Total number of aerosols for which an aerosol mass is provided
 
-  ! Corresponding names for the aerosols
+  INTEGER, PARAMETER :: naero_spc = 10
+
+! Corresponding names for the aerosols
   CHARACTER(len=7),DIMENSION(naero_spc), PARAMETER :: name_aero=(/&
        "ASBCM  ", &
@@ -52,10 +52,8 @@
        "CIDUSTM", &
        "AIBCM  ", &
-!       "AIPOMM " /)
-       "AIPOMM ", &
-       "STRAT  " /)
+       "AIPOMM " /)
 
-
-  ! Number of aerosol groups
+! 3/ Number of aerosol groups
+  INTEGER, PARAMETER :: naero_grp = 9 
   ! 1 = ZERO    
   ! 2 = AER total    
@@ -67,11 +65,11 @@
   ! 8 = SS    
   ! 9 = NO3    
-  INTEGER, PARAMETER :: naero_grp = 9 
 
-  ! Number of  wavelengths
+! Number of  wavelengths
   INTEGER, PARAMETER :: nwave = 5
 
-  ! Number of modes spectral bands
+! Number of modes spectral bands
   INTEGER, parameter :: nbands = 2
+  INTEGER, parameter :: nbands_rrtm = 6
 
 END MODULE aero_mod
Index: /LMDZ5/trunk/libf/phylmd/aeropt_2bands.F90
===================================================================
--- /LMDZ5/trunk/libf/phylmd/aeropt_2bands.F90	(revision 2002)
+++ /LMDZ5/trunk/libf/phylmd/aeropt_2bands.F90	(revision 2003)
@@ -928,5 +928,7 @@
     ENDDO  ! nb_aer  
 
-  DO m=1,nb_aer   
+!correction bug OB
+!  DO m=1,nb_aer   
+  DO m=1,naero_tot   
     IF (.NOT. used_aer(m)) THEN
       tau_ae(:,:,m,:)=0.
Index: /LMDZ5/trunk/libf/phylmd/clesphys.h
===================================================================
--- /LMDZ5/trunk/libf/phylmd/clesphys.h	(revision 2002)
+++ /LMDZ5/trunk/libf/phylmd/clesphys.h	(revision 2003)
@@ -18,4 +18,5 @@
        REAL(kind=8) CH4_ppb, N2O_ppb, CFC11_ppt, CFC12_ppt
 !IM ajout CFMIP2/CMIP5
+       REAL co2_ppm_per
        LOGICAL ok_4xCO2atm
        REAL(kind=8) RCO2_per,RCH4_per,RN2O_per,RCFC11_per,RCFC12_per
@@ -79,5 +80,5 @@
        COMMON/clesphys/                                                 &
 ! REAL FIRST
-     &       co2_ppm, solaire                                           &
+     &       co2_ppm, co2_ppm_per, solaire                              &
      &     , RCO2, RCH4, RN2O, RCFC11, RCFC12                           &
      &     , RCO2_act, RCH4_act, RN2O_act, RCFC11_act, RCFC12_act       &
Index: /LMDZ5/trunk/libf/phylmd/phys_local_var_mod.F90
===================================================================
--- /LMDZ5/trunk/libf/phylmd/phys_local_var_mod.F90	(revision 2002)
+++ /LMDZ5/trunk/libf/phylmd/phys_local_var_mod.F90	(revision 2003)
@@ -334,6 +334,9 @@
       allocate(topswcf_aero(klon,3), solswcf_aero(klon,3))
       allocate(d_u_hin(klon,klev),d_v_hin(klon,klev),d_t_hin(klon,klev))
-      allocate(tausum_aero(klon,nwave,naero_spc))
-      allocate(tau3d_aero(klon,klev,nwave,naero_spc)) 
+!      allocate(tausum_aero(klon,nwave,naero_spc))
+!      allocate(tau3d_aero(klon,klev,nwave,naero_spc)) 
+!--correction mini bug OB
+      allocate(tausum_aero(klon,nwave,naero_tot))
+      allocate(tau3d_aero(klon,klev,nwave,naero_tot)) 
       allocate(scdnc(klon, klev))
       allocate(cldncl(klon))
Index: /LMDZ5/trunk/libf/phylmd/phys_output_ctrlout_mod.F90
===================================================================
--- /LMDZ5/trunk/libf/phylmd/phys_output_ctrlout_mod.F90	(revision 2002)
+++ /LMDZ5/trunk/libf/phylmd/phys_output_ctrlout_mod.F90	(revision 2003)
@@ -3,5 +3,5 @@
   USE phys_output_var_mod
   USE indice_sol_mod
-  USE aero_mod, only : naero_spc,name_aero
+  USE aero_mod, only : naero_tot,name_aero_tau
 
 
@@ -723,29 +723,28 @@
     'solswai', 'AIE at SFR', 'W/m2', (/ ('', i=1, 9) /))
 
-!  type(ctrl_out),save,dimension(10) :: o_tausumaero  = (/ ctrl_out((/ 2, 6, 10, 10, 10, 10, 11, 11, 11 /),'OD550_ASBCM', &
-!    (/ ('', i=1, 9) /)), &
-  type(ctrl_out),save,dimension(11) :: o_tausumaero  =                           & 
+  type(ctrl_out),save,dimension(naero_tot) :: o_tausumaero  =                           & 
     (/ ctrl_out((/ 2, 6, 10, 10, 10, 10, 11, 11, 11 /),'OD550_ASBCM',                        &
-      "Aerosol Optical depth at 550 nm "//name_aero(1),"1", (/ ('', i=1, 9) /)), &
+      "Aerosol Optical depth at 550 nm "//name_aero_tau(1),"1", (/ ('', i=1, 9) /)), &
        ctrl_out((/ 2, 6, 10, 10, 10, 10, 11, 11, 11 /),'OD550_ASPOMM',                       &
-      "Aerosol Optical depth at 550 nm "//name_aero(2),"1", (/ ('', i=1, 9) /)), &
+      "Aerosol Optical depth at 550 nm "//name_aero_tau(2),"1", (/ ('', i=1, 9) /)), &
        ctrl_out((/ 2, 6, 10, 10, 10, 10, 11, 11, 11 /),'OD550_ASSO4M',                       &
-      "Aerosol Optical depth at 550 nm "//name_aero(3),"1", (/ ('', i=1, 9) /)), &
+      "Aerosol Optical depth at 550 nm "//name_aero_tau(3),"1", (/ ('', i=1, 9) /)), &
        ctrl_out((/ 2, 6, 10, 10, 10, 10, 11, 11, 11 /),'OD550_CSSO4M',                       &
-      "Aerosol Optical depth at 550 nm "//name_aero(4),"1", (/ ('', i=1, 9) /)), &
+      "Aerosol Optical depth at 550 nm "//name_aero_tau(4),"1", (/ ('', i=1, 9) /)), &
        ctrl_out((/ 2, 6, 10, 10, 10, 10, 11, 11, 11 /),'OD550_SSSSM',                        &
-      "Aerosol Optical depth at 550 nm "//name_aero(5),"1", (/ ('', i=1, 9) /)), &
+      "Aerosol Optical depth at 550 nm "//name_aero_tau(5),"1", (/ ('', i=1, 9) /)), &
        ctrl_out((/ 2, 6, 10, 10, 10, 10, 11, 11, 11 /),'OD550_ASSSM',                        &
-      "Aerosol Optical depth at 550 nm "//name_aero(6),"1", (/ ('', i=1, 9) /)), &
+      "Aerosol Optical depth at 550 nm "//name_aero_tau(6),"1", (/ ('', i=1, 9) /)), &
        ctrl_out((/ 2, 6, 10, 10, 10, 10, 11, 11, 11 /),'OD550_CSSSM',                        &
-      "Aerosol Optical depth at 550 nm "//name_aero(7),"1", (/ ('', i=1, 9) /)), &
+      "Aerosol Optical depth at 550 nm "//name_aero_tau(7),"1", (/ ('', i=1, 9) /)), &
        ctrl_out((/ 2, 6, 10, 10, 10, 10, 11, 11, 11 /),'OD550_CIDUSTM',                      &
-      "Aerosol Optical depth at 550 nm "//name_aero(8),"1", (/ ('', i=1, 9) /)), &
+      "Aerosol Optical depth at 550 nm "//name_aero_tau(8),"1", (/ ('', i=1, 9) /)), &
        ctrl_out((/ 2, 6, 10, 10, 10, 10, 11, 11, 11 /),'OD550_AIBCM',                        &
-      "Aerosol Optical depth at 550 nm "//name_aero(9),"1", (/ ('', i=1, 9) /)), &
+      "Aerosol Optical depth at 550 nm "//name_aero_tau(9),"1", (/ ('', i=1, 9) /)), &
        ctrl_out((/ 2, 6, 10, 10, 10, 10, 11, 11, 11 /),'OD550_AIPOMM',                       &
-      "Aerosol Optical depth at 550 nm "//name_aero(10),"1", (/ ('', i=1, 9) /)),&
+      "Aerosol Optical depth at 550 nm "//name_aero_tau(10),"1", (/ ('', i=1, 9) /)),&
        ctrl_out((/ 2, 2, 10, 10, 10, 10, 11, 11, 11 /),'OD550_STRAT',                        &
-      "Aerosol Optical depth at 550 nm "//name_aero(11),"1", (/ ('', i=1, 9) /)) /)
+      "Aerosol Optical depth at 550 nm "//name_aero_tau(11),"1", (/ ('', i=1, 9) /)) /)
+!
   TYPE(ctrl_out), SAVE :: o_od550aer = ctrl_out((/ 2, 6, 10, 10, 10, 10, 11, 11, 11 /), &
     'od550aer', 'Total aerosol optical depth at 550nm', '-', (/ ('', i=1, 9) /))
Index: /LMDZ5/trunk/libf/phylmd/phys_output_write_mod.F90
===================================================================
--- /LMDZ5/trunk/libf/phylmd/phys_output_write_mod.F90	(revision 2002)
+++ /LMDZ5/trunk/libf/phylmd/phys_output_write_mod.F90	(revision 2003)
@@ -19,5 +19,5 @@
        ok_ade, ok_aie, ivap, new_aod, ok_sync, &
        ptconv, read_climoz, clevSTD, ptconvth, &
-       d_t, qx, d_qx, zmasse, flag_aerosol_strat)
+       d_t, qx, d_qx, zmasse, flag_aerosol, flag_aerosol_strat, ok_cdnc)
 
     ! This subroutine does the actual writing of diagnostics that were
@@ -223,5 +223,6 @@
     USE comgeomphy, only: airephy
     USE surface_data, only: type_ocean, ok_veget, ok_snow
-    USE aero_mod, only: naero_spc
+!    USE aero_mod, only: naero_spc
+    USE aero_mod, only: naero_tot
     USE ioipsl, only: histend, histsync
     USE iophy, only: set_itau_iophy, histwrite_phy
@@ -260,4 +261,6 @@
     REAL, DIMENSION(klon, llm) :: zmasse
     LOGICAL :: flag_aerosol_strat
+    INTEGER :: flag_aerosol 
+    LOGICAL :: ok_cdnc
     REAL, DIMENSION(3) :: freq_moyNMC
 
@@ -771,5 +774,5 @@
        ! OD550 per species
        IF (new_aod .and. (.not. aerosol_couple)) THEN
-          IF (ok_ade.OR.ok_aie) THEN
+          IF (flag_aerosol.GT.0) THEN
              CALL histwrite_phy(o_od550aer, od550aer)
              CALL histwrite_phy(o_od865aer, od865aer)
@@ -793,6 +796,8 @@
              !--STRAT AER
           ENDIF
-          IF (ok_ade.OR.ok_aie.OR.flag_aerosol_strat) THEN
-             DO naero = 1, naero_spc
+          IF (flag_aerosol.GT.0.OR.flag_aerosol_strat) THEN
+!             DO naero = 1, naero_spc
+!--correction mini bug OB
+             DO naero = 1, naero_tot
                 CALL histwrite_phy(o_tausumaero(naero), &
                      tausum_aero(:,2,naero) )
@@ -831,4 +836,6 @@
           CALL histwrite_phy(o_topswai, topswai_aero)
           CALL histwrite_phy(o_solswai, solswai_aero)
+       ENDIF
+       IF (flag_aerosol.GT.0.AND.ok_cdnc) THEN
           CALL histwrite_phy(o_scdnc, scdnc)
           CALL histwrite_phy(o_cldncl, cldncl)
Index: /LMDZ5/trunk/libf/phylmd/phys_state_var_mod.F90
===================================================================
--- /LMDZ5/trunk/libf/phylmd/phys_state_var_mod.F90	(revision 2002)
+++ /LMDZ5/trunk/libf/phylmd/phys_state_var_mod.F90	(revision 2003)
@@ -349,4 +349,6 @@
       REAL,SAVE,ALLOCATABLE :: tau_aero(:,:,:,:), piz_aero(:,:,:,:), cg_aero(:,:,:,:)
 !$OMP THREADPRIVATE(tau_aero, piz_aero, cg_aero)
+      REAL,SAVE,ALLOCATABLE :: tau_aero_rrtm(:,:,:,:), piz_aero_rrtm(:,:,:,:), cg_aero_rrtm(:,:,:,:)
+!$OMP THREADPRIVATE(tau_aero_rrtm, piz_aero_rrtm, cg_aero_rrtm)
       REAL,SAVE,ALLOCATABLE :: ccm(:,:,:)
 !$OMP THREADPRIVATE(ccm)
@@ -517,4 +519,6 @@
       ALLOCATE(topswai(klon), solswai(klon))
       ALLOCATE(tau_aero(klon,klev,naero_grp,nbands),piz_aero(klon,klev,naero_grp,nbands),cg_aero(klon,klev,naero_grp,nbands))
+      ALLOCATE(tau_aero_rrtm(klon,klev,2,nbands_rrtm),piz_aero_rrtm(klon,klev,2,nbands_rrtm))
+      ALLOCATE(cg_aero_rrtm(klon,klev,2,nbands_rrtm))
       ALLOCATE(ccm(klon,klev,nbands))
 
@@ -631,4 +635,5 @@
       deallocate(topswai, solswai)
       deallocate(tau_aero,piz_aero,cg_aero)
+      deallocate(tau_aero_rrtm,piz_aero_rrtm,cg_aero_rrtm)
       deallocate(ccm)
       if (ok_gwd_rando) deallocate(du_gwd_rando, dv_gwd_rando)
Index: /LMDZ5/trunk/libf/phylmd/physiq.F90
===================================================================
--- /LMDZ5/trunk/libf/phylmd/physiq.F90	(revision 2002)
+++ /LMDZ5/trunk/libf/phylmd/physiq.F90	(revision 2003)
@@ -52,4 +52,6 @@
   USE indice_sol_mod
   USE phytrac_mod, ONLY : phytrac
+
+  USE YOERAD   , ONLY : NRADLP
 
   !IM stations CFMIP
@@ -2697,5 +2699,7 @@
      !jq - Johannes Quaas, 27/11/2003 (quaas@lmd.jussieu.fr)
      IF (flag_aerosol .gt. 0) THEN
-        IF (.NOT. aerosol_couple) &
+        IF (.NOT. aerosol_couple) THEN
+           IF (iflag_rrtm .EQ. 0) THEN !--old radiation
+!
              CALL readaerosol_optic( &
              debut, new_aod, flag_aerosol, itap, jD_cur-jD_ref, &
@@ -2704,9 +2708,27 @@
              tau_aero, piz_aero, cg_aero,  &
              tausum_aero, tau3d_aero)
+!
+           ELSE                       ! RRTM radiation
+!
+             CALL readaerosol_optic_rrtm( &
+             debut, new_aod, flag_aerosol, itap, jD_cur-jD_ref, &
+             pdtphys, pplay, paprs, t_seri, rhcl, presnivs,  &
+             mass_solu_aero, mass_solu_aero_pi,  &
+             tau_aero_rrtm, piz_aero_rrtm, cg_aero_rrtm,  &
+             tausum_aero, tau3d_aero)
+!
+           ENDIF
+        ENDIF
      ELSE
         tausum_aero(:,:,:) = 0.
-        tau_aero(:,:,:,:) = 0.
-        piz_aero(:,:,:,:) = 0.
-        cg_aero(:,:,:,:)  = 0.
+        IF (iflag_rrtm .EQ. 0) THEN !--old radiation
+          tau_aero(:,:,:,:) = 0.
+          piz_aero(:,:,:,:) = 0.
+          cg_aero(:,:,:,:)  = 0.
+        ELSE
+          tau_aero_rrtm(:,:,:,:)=0.0
+          piz_aero_rrtm(:,:,:,:)=0.0
+          cg_aero_rrtm(:,:,:,:)=0.0
+        ENDIF
      ENDIF
      !
@@ -2715,5 +2737,9 @@
      IF (flag_aerosol_strat) THEN
         PRINT *,'appel a readaerosolstrat', mth_cur
-        CALL readaerosolstrato(debut)
+        IF (iflag_rrtm.EQ.0) THEN
+         CALL readaerosolstrato(debut)
+        ELSE
+         CALL readaerosolstrato_rrtm(debut)
+        ENDIF
      ENDIF
      !--fin STRAT AEROSOL
@@ -2934,4 +2960,8 @@
 
   if (ok_newmicro) then
+     IF (iflag_rrtm.NE.0.AND.ok_cdnc.AND.NRADLP.NE.3) THEN 
+      PRINT *,'RRTM choix incoherent NRADLP doit etre egal a 3 pour ok_cdnc' 
+      STOP
+     ENDIF
      CALL newmicro (ok_cdnc, bl95_b0, bl95_b1, &
           paprs, pplay, t_seri, cldliq, cldfra, &
@@ -3075,4 +3105,5 @@
              flag_aerosol_strat, &
              tau_aero, piz_aero, cg_aero, &
+             tau_aero_rrtm, piz_aero_rrtm, cg_aero_rrtm,&     ! Rajoute par OB pour RRTM
              cldtaupirad,new_aod, &
              zqsat, flwc, fiwc, &
@@ -3121,4 +3152,5 @@
                    flag_aerosol_strat, &
                    tau_aero, piz_aero, cg_aero, &
+                   tau_aero_rrtm, piz_aero_rrtm, cg_aero_rrtm,&     ! Rajoute par OB pour RRTM
                    cldtaupi,new_aod, &
                    zqsat, flwc, fiwc, &
@@ -3746,5 +3778,5 @@
        ptconv, read_climoz, clevSTD,                   &
        ptconvth, d_t, qx, d_qx, zmasse,                &
-       flag_aerosol_strat)
+       flag_aerosol, flag_aerosol_strat, ok_cdnc)
 
 
Index: /LMDZ5/trunk/libf/phylmd/radlwsw_m.F90
===================================================================
--- /LMDZ5/trunk/libf/phylmd/radlwsw_m.F90	(revision 2002)
+++ /LMDZ5/trunk/libf/phylmd/radlwsw_m.F90	(revision 2003)
@@ -1,2 +1,5 @@
+!
+! $Id$
+!
 module radlwsw_m
 
@@ -13,4 +16,5 @@
    flag_aerosol_strat,&
    tau_aero, piz_aero, cg_aero,&
+   tau_aero_rrtm, piz_aero_rrtm, cg_aero_rrtm,& ! rajoute par OB pour RRTM
    cldtaupi, new_aod, &
    qsat, flwc, fiwc, &
@@ -177,4 +181,9 @@
   REAL,    INTENT(in)  :: piz_aero(KLON,KLEV,9,2)                        ! aerosol optical properties (see aeropt.F)
   REAL,    INTENT(in)  :: cg_aero(KLON,KLEV,9,2)                         ! aerosol optical properties (see aeropt.F)
+!--OB
+  REAL,    INTENT(in)  :: tau_aero_rrtm(KLON,KLEV,2,NSW)                 ! aerosol optical properties RRTM
+  REAL,    INTENT(in)  :: piz_aero_rrtm(KLON,KLEV,2,NSW)                 ! aerosol optical properties RRTM
+  REAL,    INTENT(in)  :: cg_aero_rrtm(KLON,KLEV,2,NSW)                  ! aerosol optical properties RRTM
+!--OB fin
   REAL,    INTENT(in)  :: cldtaupi(KLON,KLEV)                            ! cloud optical thickness for pre-industrial aerosol concentrations
   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
@@ -273,4 +282,8 @@
       REAL(KIND=8) ref_liq_i(klon,klev) ! cloud droplet radius present-day from newmicro (inverted)
       REAL(KIND=8) ref_ice_i(klon,klev) ! ice crystal radius present-day from newmicro (inverted)
+!--OB
+      REAL(KIND=8) ref_liq_pi_i(klon,klev) ! cloud droplet radius pre-industrial from newmicro (inverted)
+      REAL(KIND=8) ref_ice_pi_i(klon,klev) ! ice crystal radius pre-industrial from newmicro (inverted)
+!--end OB
       REAL(KIND=8) paprs_i(klon,klev+1)
       REAL(KIND=8) pplay_i(klon,klev)
@@ -297,7 +310,10 @@
       REAL(KIND=8) ZSWFT (klon,klev+1),ZSWFT_i (klon,klev+1)
       REAL(KIND=8) ZFLUCDWN_i(klon,klev+1),ZFLUCUP_i(klon,klev+1)
-      REAL(KIND=8) PPIZA_DST(klon,klev,NSW)
-      REAL(KIND=8) PCGA_DST(klon,klev,NSW)
-      REAL(KIND=8) PTAUREL_DST(klon,klev,NSW)
+      REAL(KIND=8) PPIZA_TOT(klon,klev,NSW)
+      REAL(KIND=8) PCGA_TOT(klon,klev,NSW)
+      REAL(KIND=8) PTAU_TOT(klon,klev,NSW)
+      REAL(KIND=8) PPIZA_NAT(klon,klev,NSW)
+      REAL(KIND=8) PCGA_NAT(klon,klev,NSW)
+      REAL(KIND=8) PTAU_NAT(klon,klev,NSW)
       REAL(KIND=8) PSFSWDIR(klon,NSW)
       REAL(KIND=8) PSFSWDIF(klon,NSW)
@@ -319,8 +335,6 @@
 !      REAL(KIND=8) SUN_FRACT(2)
   real, parameter:: dobson_u = 2.1415e-05 ! Dobson unit, in kg m-2
-!--OB
-      REAL tau(6), alt, zdz, zrho
-      character (len=20) :: modname='radlwsw'
-      character (len=80) :: abort_message
+  CHARACTER (LEN=80) :: abort_message
+  CHARACTER (LEN=80) :: modname='radlwsw_m'
 
   call assert(size(wo, 1) == klon, size(wo, 2) == klev, "radlwsw wo")
@@ -621,56 +635,26 @@
       ENDDO
       ENDDO
-!      
-!--OB Valeurs de tau(NSW) calculees par O.Boucher (MPL 20130417)
-!-- voir aod_2bands.F90, aod_4bands.F90, aod_6bands.F90 dans BENCH48x36x19
-      SELECT CASE (NSW)
-      CASE (2)
-       tau(1)=0.22017828
-       tau(2)=0.110565394
-      CASE (4)
-       tau(1)=0.22017743
-       tau(2)=0.12738435
-       tau(3)=0.07157799
-       tau(4)=0.03301198
-      CASE (6)
-       tau(1)=0.49999997
-       tau(2)=0.28593913
-       tau(3)=0.20057647
-       tau(4)=0.12738435
-       tau(5)=0.07157799
-       tau(6)=0.03301198
-      END SELECT
-!     tau1=0.2099  ! anciennes valeurs de Nicolas Huneeus (20130326)
-!     tau2=0.1022
-!     tau(1)=1.0e-15
-!     tau(2)=1.0e-15
-!     tau(3)=1.0e-15
-!     tau(4)=1.0e-15
-!     tau(5)=1.0e-15
-!     tau(6)=1.0e-15
-      print *,'Radlwsw: NSW tau= ',NSW,tau(:)
-      DO i = 1, kdlon
-      alt=0.0
+!
+!--OB
+!--aerosol TOT  - anthropogenic+natural
+!--aerosol NAT  - natural only
+!
+      DO i = 1, kdlon
       DO k = 1, kflev
-      zrho=pplay(i,k)/t(i,k)/RD
-      zdz=(paprs(i,k)-paprs(i,k+1))/zrho/RG
       DO kk=1, NSW
-      PTAUREL_DST(i,kflev+1-k,kk)=(tau(kk)/2000.0)*max(0.0,min(zdz,2000.0-alt))
-      PTAUREL_DST(i,kflev+1-k,kk)=MAX(PTAUREL_DST(i,kflev+1-k,kk), 1e-15)
-      ENDDO
-      alt=alt+zdz
-      ENDDO
-      ENDDO
-
-!
-      DO k = 1, kflev
-      DO i = 1, kdlon
-      DO kk = 1, NSW
-!     PPIZA_DST(i,k,kk)=1.0   
-      PPIZA_DST(i,k,kk)=0.8   
-      PCGA_DST(i,k,kk)=0.7
-      ENDDO
-      ENDDO
-      ENDDO
+!
+      PTAU_TOT(i,kflev+1-k,kk)=tau_aero_rrtm(i,k,2,kk)
+      PPIZA_TOT(i,kflev+1-k,kk)=piz_aero_rrtm(i,k,2,kk)
+      PCGA_TOT(i,kflev+1-k,kk)=cg_aero_rrtm(i,k,2,kk)
+!
+      PTAU_NAT(i,kflev+1-k,kk)=tau_aero_rrtm(i,k,1,kk)
+      PPIZA_NAT(i,kflev+1-k,kk)=piz_aero_rrtm(i,k,1,kk)
+      PCGA_NAT(i,kflev+1-k,kk)=cg_aero_rrtm(i,k,1,kk)
+!
+      ENDDO
+      ENDDO
+      ENDDO
+!-end OB
+!
 !      
       DO i = 1, kdlon
@@ -707,4 +691,7 @@
             ref_liq_i(1:klon,k) =ref_liq(1:klon,klev+1-k)
             ref_ice_i(1:klon,k) =ref_ice(1:klon,klev+1-k)
+!-OB
+            ref_liq_pi_i(1:klon,k) =ref_liq_pi(1:klon,klev+1-k)
+            ref_ice_pi_i(1:klon,k) =ref_ice_pi(1:klon,klev+1-k)
          enddo
          do k=1,kflev
@@ -762,15 +749,23 @@
 
 ! Nouvel appel a RECMWF (celui du cy32t0)
-         CALL RECMWF (ist , iend, klon , ktdia  , klev   , kmode ,&
+         CALL RECMWF_AERO (ist , iend, klon , ktdia  , klev   , kmode ,&
          PALBD_NEW,PALBP_NEW, paprs_i , pplay_i , RCO2   , cldfra_i,&
          POZON_i  , PAER_i  , PDP_i   , PEMIS   , rmu0   ,&
           q_i     , qsat_i  , fiwc_i  , flwc_i  , zmasq  , t_i  ,tsol,&
          ref_liq_i, ref_ice_i, &
+         ref_liq_pi_i, ref_ice_pi_i, &   ! rajoute par OB pour diagnostiquer effet indirect
          ZEMTD_i  , ZEMTU_i , ZTRSO_i ,&
          ZTH_i    , ZCTRSO  , ZCEMTR  , ZTRSOD  ,&
          ZLWFC    , ZLWFT_i , ZSWFC   , ZSWFT_i ,&
          PSFSWDIR , PSFSWDIF, PFSDNN  , PFSDNV  ,&
-         PPIZA_DST, PCGA_DST,PTAUREL_DST,ZFLUX_i  , ZFLUC_i ,&
-         ZFSDWN_i , ZFSUP_i , ZFCDWN_i, ZFCUP_i)
+         PPIZA_TOT, PCGA_TOT,PTAU_TOT,&
+         PPIZA_NAT, PCGA_NAT,PTAU_NAT,           &  ! rajoute par OB pour diagnostiquer effet direct
+         ZFLUX_i  , ZFLUC_i ,&
+         ZFSDWN_i , ZFSUP_i , ZFCDWN_i, ZFCUP_i,&
+         ZTOPSWADAERO,ZSOLSWADAERO,&  ! rajoute par OB pour diagnostics
+         ZTOPSWAD0AERO,ZSOLSWAD0AERO,&
+         ZTOPSWAIAERO,ZSOLSWAIAERO, &
+         ZTOPSWCF_AERO,ZSOLSWCF_AERO, &
+         ok_ade, ok_aie, flag_aerosol,flag_aerosol_strat) ! flags aerosols
             
          print *,'RADLWSW: apres RECMWF'
@@ -791,7 +786,7 @@
         CALL writefield_phy('pfsdnn',PFSDNN,1)
         CALL writefield_phy('pfsdnv',PFSDNV,1)
-        CALL writefield_phy('ppiza_dst',PPIZA_DST,klev)
-        CALL writefield_phy('pcga_dst',PCGA_DST,klev)
-        CALL writefield_phy('ptaurel_dst',PTAUREL_DST,klev)
+        CALL writefield_phy('ppiza_dst',PPIZA_TOT,klev)
+        CALL writefield_phy('pcga_dst',PCGA_TOT,klev)
+        CALL writefield_phy('ptaurel_dst',PTAU_TOT,klev)
         CALL writefield_phy('zflux_i',ZFLUX_i,klev+1)
         CALL writefield_phy('zfluc_i',ZFLUC_i,klev+1)
@@ -813,7 +808,10 @@
 !  ZSWFC        (KPROMA,2)       ; CLEAR-SKY SHORTWAVE FLUXES
 !  ZSWFT        (KPROMA,KLEV+1)  ; TOTAL-SKY SHORTWAVE FLUXES
-!  PPIZA_DST    (KPROMA,KLEV,NSW); Single scattering albedo of dust 
-!  PCGA_DST     (KPROMA,KLEV,NSW); Assymetry factor for dust 
-!  PTAUREL_DST  (KPROMA,KLEV,NSW); Optical depth of dust relative to at 550nm
+!  PPIZA_TOT    (KPROMA,KLEV,NSW); Single scattering albedo of total aerosols 
+!  PCGA_TOT     (KPROMA,KLEV,NSW); Assymetry factor for total aerosols 
+!  PTAU_TOT     (KPROMA,KLEV,NSW); Optical depth of total aerosols 
+!  PPIZA_NAT    (KPROMA,KLEV,NSW); Single scattering albedo of natural aerosols 
+!  PCGA_NAT     (KPROMA,KLEV,NSW); Assymetry factor for natural aerosols 
+!  PTAU_NAT     (KPROMA,KLEV,NSW); Optical depth of natiral aerosols 
 !  PSFSWDIR     (KPROMA,NSW)     ;
 !  PSFSWDIF     (KPROMA,NSW)     ;
@@ -854,4 +852,18 @@
          ENDDO
       ENDDO
+
+!--ajout OB
+      ZTOPSWADAERO(:) =ZTOPSWADAERO(:) *fract(:)
+      ZSOLSWADAERO(:) =ZSOLSWADAERO(:) *fract(:)
+      ZTOPSWAD0AERO(:)=ZTOPSWAD0AERO(:)*fract(:)
+      ZSOLSWAD0AERO(:)=ZSOLSWAD0AERO(:)*fract(:)
+      ZTOPSWAIAERO(:) =ZTOPSWAIAERO(:) *fract(:)
+      ZSOLSWAIAERO(:) =ZSOLSWAIAERO(:) *fract(:)
+      ZTOPSWCF_AERO(:,1)=ZTOPSWCF_AERO(:,1)*fract(:) 
+      ZTOPSWCF_AERO(:,2)=ZTOPSWCF_AERO(:,2)*fract(:) 
+      ZTOPSWCF_AERO(:,3)=ZTOPSWCF_AERO(:,3)*fract(:) 
+      ZSOLSWCF_AERO(:,1)=ZSOLSWCF_AERO(:,1)*fract(:)
+      ZSOLSWCF_AERO(:,2)=ZSOLSWCF_AERO(:,2)*fract(:)
+      ZSOLSWCF_AERO(:,3)=ZSOLSWCF_AERO(:,3)*fract(:)
 
 !     print*,'SW_RRTM ZFSDN0 1 , klev:',ZFSDN0(1:klon,1),ZFSDN0(1:klon,klev)
Index: /LMDZ5/trunk/libf/phylmd/readaerosol_optic.F90
===================================================================
--- /LMDZ5/trunk/libf/phylmd/readaerosol_optic.F90	(revision 2002)
+++ /LMDZ5/trunk/libf/phylmd/readaerosol_optic.F90	(revision 2003)
@@ -40,6 +40,9 @@
   REAL, DIMENSION(klon,klev,naero_grp,nbands), INTENT(OUT) :: piz_aero    ! Single scattering albedo aerosol
   REAL, DIMENSION(klon,klev,naero_grp,nbands), INTENT(OUT) :: cg_aero     ! asymmetry parameter aerosol
-  REAL, DIMENSION(klon,nwave,naero_spc), INTENT(OUT)       :: tausum_aero
-  REAL, DIMENSION(klon,klev,nwave,naero_spc), INTENT(OUT)  :: tau3d_aero
+!  REAL, DIMENSION(klon,nwave,naero_spc), INTENT(OUT)       :: tausum_aero
+!  REAL, DIMENSION(klon,klev,nwave,naero_spc), INTENT(OUT)  :: tau3d_aero
+!--correction mini bug OB
+  REAL, DIMENSION(klon,nwave,naero_tot), INTENT(OUT)       :: tausum_aero
+  REAL, DIMENSION(klon,klev,nwave,naero_tot), INTENT(OUT)  :: tau3d_aero
 
 ! Local variables
Index: /LMDZ5/trunk/libf/phylmd/rrtm/rrtm_taumol1.F90
===================================================================
--- /LMDZ5/trunk/libf/phylmd/rrtm/rrtm_taumol1.F90	(revision 2002)
+++ /LMDZ5/trunk/libf/phylmd/rrtm/rrtm_taumol1.F90	(revision 2003)
@@ -189,4 +189,10 @@
 
 IF (LHOOK) CALL DR_HOOK('RRTM_TAUMOL1',0,ZHOOK_HANDLE)
+!--ajout OB 
+IF (K_LAYTROP.GT.100) THEN 
+PRINT *,'ATTENTION KLAY_TROP > 100 PROBLEME ARRAY DANS RRTM ON ARRETE'
+STOP
+!--fin ajout OB
+ENDIF
 DO I_LAY = 1, K_LAYTROP
   IND0(I_LAY) = ((K_JP(I_LAY)-1)*5+(K_JT(I_LAY)-1))*NSPA(1) + 1
Index: /LMDZ5/trunk/libf/phylmd/rrtm/swclr.F90
===================================================================
--- /LMDZ5/trunk/libf/phylmd/rrtm/swclr.F90	(revision 2002)
+++ /LMDZ5/trunk/libf/phylmd/rrtm/swclr.F90	(revision 2003)
@@ -5,5 +5,5 @@
  & PRK   , PRMU0 , PTAUAZ, PTRA1 , PTRA2 , PTRCLR, &
 !++MODIFCODE
-  & LRDUST,PPIZA_DST, PCGA_DST, PTAUREL_DST )
+  & LDDUST,PPIZA_DST, PCGA_DST, PTAU_DST )
 !--MODIFCODE
 
@@ -58,4 +58,5 @@
 !        Y.Seity 05-10-10 : add add 3 optional arg. for dust SW properties
 !        Y.Seity 06-09-09 : add modset from O.Thouron (MesoNH) under NOVLP tests
+!        O.Boucher fev.2014: modification sur les aerosols pour utiliser les variables DST
 !     ------------------------------------------------------------------
 
@@ -71,6 +72,5 @@
 
 IMPLICIT NONE
-
-include "clesphys.h"
+INCLUDE "clesphys.h"
 
 INTEGER(KIND=JPIM),INTENT(IN)    :: KLON 
@@ -86,8 +86,8 @@
 REAL(KIND=JPRB)   ,INTENT(IN)    :: PSEC(KLON) 
 !++MODIFCODE
-LOGICAL           ,INTENT(IN)    :: LRDUST                   ! flag for DUST
+LOGICAL           ,INTENT(IN)    :: LDDUST                   ! flag for DUST
 REAL(KIND=JPRB)   ,INTENT(IN)    :: PPIZA_DST(KLON,KLEV)
 REAL(KIND=JPRB)   ,INTENT(IN)    :: PCGA_DST(KLON,KLEV)
-REAL(KIND=JPRB)   ,INTENT(IN)    :: PTAUREL_DST(KLON,KLEV)
+REAL(KIND=JPRB)   ,INTENT(IN)    :: PTAU_DST(KLON,KLEV)
 !--MODIFCODE
 REAL(KIND=JPRB)   ,INTENT(OUT)   :: PCGAZ(KLON,KLEV) 
@@ -157,48 +157,59 @@
 
 !++MODIFCODE  
+!--OB on fait passer les aerosols LMDZ dans la variable DST
   IF(NOVLP < 5)THEN !ECMWF VERSION
-  DO JAE=1,6
+!  DO JAE=1,6
       DO JL = KIDIA,KFDIA
-        PTAUAZ(JL,JK)=PTAUAZ(JL,JK)+PAER(JL,JAE,IKL)*RTAUA(KNU,JAE)
-        PPIZAZ(JL,JK)=PPIZAZ(JL,JK)+PAER(JL,JAE,IKL)&
-         & * RTAUA(KNU,JAE)*RPIZA(KNU,JAE)  
-        PCGAZ(JL,JK) =  PCGAZ(JL,JK) +PAER(JL,JAE,IKL)&
-         & * RTAUA(KNU,JAE)*RPIZA(KNU,JAE)*RCGA(KNU,JAE)  
+!        PTAUAZ(JL,JK)=PTAUAZ(JL,JK)+PAER(JL,JAE,IKL)*RTAUA(KNU,JAE)
+        PTAUAZ(JL,JK)=PTAU_DST(JL,IKL)
+!        PPIZAZ(JL,JK)=PPIZAZ(JL,JK)+PAER(JL,JAE,IKL)&
+!         & * RTAUA(KNU,JAE)*RPIZA(KNU,JAE)  
+        PPIZAZ(JL,JK)=PTAU_DST(JL,IKL)*PPIZA_DST(JL,IKL)
+!        PCGAZ(JL,JK) =  PCGAZ(JL,JK) +PAER(JL,JAE,IKL)&
+!         & * RTAUA(KNU,JAE)*RPIZA(KNU,JAE)*RCGA(KNU,JAE)  
+        PCGAZ(JL,JK)=PTAU_DST(JL,IKL)*PPIZA_DST(JL,IKL)*PCGA_DST(JL,IKL)
       ENDDO
-    ENDDO
+!    ENDDO
   ELSE ! MESONH VERSION
-     DO JAE=1,6
+!--OB on utilise directement les aerosols LMDZ
+!     DO JAE=1,6
         DO JL = KIDIA,KFDIA
            !Special optical properties for dust
-           IF (LRDUST.AND.(JAE==3)) THEN
+!           IF (LDDUST.AND.(JAE==3)) THEN
            !Ponderation of aerosol optical properties:first step 
            !ti
-            PTAUAZ(JL,JK)=PTAUAZ(JL,JK) + PAER(JL,JAE,IKL) * PTAUREL_DST(JL,IKL)
+!            PTAUAZ(JL,JK)=PTAUAZ(JL,JK) + PAER(JL,JAE,IKL) * PTAUREL_DST(JL,IKL)
+            PTAUAZ(JL,JK)= PTAU_DST(JL,IKL)
            !wi*ti
-             PPIZAZ(JL,JK)=PPIZAZ(JL,JK) + PAER(JL,JAE,IKL)  &
-                   & *PTAUREL_DST(JL,IKL)*PPIZA_DST(JL,IKL)
+!             PPIZAZ(JL,JK)=PPIZAZ(JL,JK) + PAER(JL,JAE,IKL)  &
+!                   & *PTAUREL_DST(JL,IKL)*PPIZA_DST(JL,IKL)
+             PPIZAZ(JL,JK)=PTAU_DST(JL,IKL)*PPIZA_DST(JL,IKL)
            !wi*ti*gi
-             PCGAZ(JL,JK) = PCGAZ(JL,JK) + PAER(JL,JAE,IKL) &
-                &  *PTAUREL_DST(JL,IKL)*PPIZA_DST(JL,IKL)*PCGA_DST(JL,IKL)
+!             PCGAZ(JL,JK) = PCGAZ(JL,JK) + PAER(JL,JAE,IKL) &
+!                &  *PTAUREL_DST(JL,IKL)*PPIZA_DST(JL,IKL)*PCGA_DST(JL,IKL)
+             PCGAZ(JL,JK) = PTAU_DST(JL,IKL)*PPIZA_DST(JL,IKL)*PCGA_DST(JL,IKL)
            !wi*ti*(gi**2)
-             ZFACOA_NEW(JL,JK)= ZFACOA_NEW(JL,JK)+PAER(JL, JAE, IKL)&
-                & *PTAUREL_DST(JL,IKL) *PPIZA_DST(JL,IKL)*PCGA_DST(JL,IKL)*&
+!             ZFACOA_NEW(JL,JK)= ZFACOA_NEW(JL,JK)+PAER(JL, JAE, IKL)&
+!                & *PTAUREL_DST(JL,IKL) *PPIZA_DST(JL,IKL)*PCGA_DST(JL,IKL)*&
+!                & PCGA_DST(JL,IKL)
+             ZFACOA_NEW(JL,JK)= ZFACOA_NEW(JL,JK)+&
+                & PTAU_DST(JL,IKL) *PPIZA_DST(JL,IKL)*PCGA_DST(JL,IKL)*&
                 & PCGA_DST(JL,IKL)
-           ELSE
+!           ELSE
            !Ponderation of aerosol optical properties:first step 
            !ti
-             PTAUAZ(JL,JK)=PTAUAZ(JL,JK)+PAER(JL, JAE, IKL)*RTAUA(KNU,JAE)
+!             PTAUAZ(JL,JK)=PTAUAZ(JL,JK)+PAER(JL, JAE, IKL)*RTAUA(KNU,JAE)
            !wi*ti
-             PPIZAZ(JL,JK)=PPIZAZ(JL,JK)+PAER(JL, JAE, IKL)&
-                &* RTAUA(KNU,JAE)*RPIZA(KNU,JAE)
+!             PPIZAZ(JL,JK)=PPIZAZ(JL,JK)+PAER(JL, JAE, IKL)&
+!                &* RTAUA(KNU,JAE)*RPIZA(KNU,JAE)
            !wi*ti*gi
-             PCGAZ(JL,JK) =  PCGAZ(JL,JK) +PAER(JL, JAE, IKL)&
-                &* RTAUA(KNU,JAE)*RPIZA(KNU,JAE)*RCGA(KNU,JAE)
+!             PCGAZ(JL,JK) =  PCGAZ(JL,JK) +PAER(JL, JAE, IKL)&
+!                &* RTAUA(KNU,JAE)*RPIZA(KNU,JAE)*RCGA(KNU,JAE)
            !wi*ti*(gi**2)
-             ZFACOA_NEW(JL,JK)= ZFACOA_NEW(JL,JK)+PAER(JL, JAE, IKL)&
-                &* RTAUA(KNU,JAE)*RPIZA(KNU,JAE)*RCGA(KNU,JAE)*RCGA(KNU,JAE)
-           ENDIF
+!             ZFACOA_NEW(JL,JK)= ZFACOA_NEW(JL,JK)+PAER(JL, JAE, IKL)&
+!                &* RTAUA(KNU,JAE)*RPIZA(KNU,JAE)*RCGA(KNU,JAE)*RCGA(KNU,JAE)
+!           ENDIF
         ENDDO
-     ENDDO
+!     ENDDO
   ENDIF
 !--MODIFCODE  
