Index: LMDZ4/trunk/libf/phylmd/aeropt_2bands.F90
===================================================================
--- LMDZ4/trunk/libf/phylmd/aeropt_2bands.F90	(revision 1336)
+++ LMDZ4/trunk/libf/phylmd/aeropt_2bands.F90	(revision 1337)
@@ -10,4 +10,5 @@
   USE dimphy
   USE aero_mod
+  USE phys_local_var_mod, only: absvisaer
 
   !    Yves Balkanski le 12 avril 2006
@@ -1119,4 +1120,10 @@
     ENDDO
   ENDDO
+   
+
+  inu=1
+  DO i=1, KLON
+     absvisaer(i)=SUM((1-piz_allaer(i,:,:,inu))*tau_allaer(i,:,:,inu))
+  END DO	
 
   DEALLOCATE(aerosol_name) 
Index: LMDZ4/trunk/libf/phylmd/aeropt_5wv.F90
===================================================================
--- LMDZ4/trunk/libf/phylmd/aeropt_5wv.F90	(revision 1336)
+++ LMDZ4/trunk/libf/phylmd/aeropt_5wv.F90	(revision 1337)
@@ -11,4 +11,5 @@
   USE DIMPHY
   USE aero_mod
+  USE phys_local_var_mod, only: od550aer,od865aer,ec550aer,od550lt1aer
 
   !
@@ -141,5 +142,5 @@
   REAL :: tau3d(KLON,KLEV), piz3d(KLON,KLEV), cg3d(KLON,KLEV)
   REAL :: abs3d(KLON,KLEV)     ! epaisseur optique d'absorption
-
+  REAL :: dh(KLON,KLEV)
   
   REAL :: alpha_aers_5wv(nbre_RH,las,naero_soluble)   ! ext. coeff. Soluble comp. units *** m2/g 
@@ -624,4 +625,5 @@
 !      IF (pplay(i,k).EQ.0) stop  'stop aeropt_5wv p '
       zrho=pplay(i,k)/t_seri(i,k)/RD                  ! kg/m3
+      dh(i,k)=pdel(i,k)/(gravit*zrho)
 !CDIR UNROLL=naero_spc
       mass_temp(i,k,:) = m_allaer(i,k,:) / zrho / 1.e+9
@@ -848,4 +850,17 @@
 !  ENDDO
 
+   DO i=1, klon
+      od550aer(i)=SUM(tausum(i,2,:))
+      od865aer(i)=SUM(tausum(i,5,:))
+      DO k=1, KLEV
+         ec550aer(i,k)=SUM(tau(i,k,2,:))/dh(i,k)
+      END DO	
+   END DO
+   od550lt1aer(:)=tausum(:,2,id_ASSO4M)+tausum(:,2,id_ASBCM)+tausum(:,2,id_AIBCM)+ &
+	tausum(:,2,id_ASPOMM)+tausum(:,2,id_AIPOMM)+tausum(:,2,id_ASSSM)+ &
+	0.03*tausum(:,2,id_CSSSM)+0.4*tausum(:,2,id_CIDUSTM)
+
+
+
   DEALLOCATE(aerosol_name) 
   
Index: LMDZ4/trunk/libf/phylmd/newmicro.F
===================================================================
--- LMDZ4/trunk/libf/phylmd/newmicro.F	(revision 1336)
+++ LMDZ4/trunk/libf/phylmd/newmicro.F	(revision 1337)
@@ -11,4 +11,8 @@
 
       USE dimphy
+      USE phys_local_var_mod, only: scdnc,cldncl,reffclwtop,lcc,
+     .                              reffclws,reffclwc,cldnvi,lcc3d,
+     .                              lcc3dcon,lcc3dstra
+      USE phys_state_var_mod, only: rnebcon,clwcon
       IMPLICIT none
 c======================================================================
@@ -46,4 +50,19 @@
 #include "radepsi.h"
 #include "radopt.h"
+c choix de l'hypothese de recouvrememnt nuageuse
+      LOGICAL RANDOM,MAXIMUM_RANDOM,MAXIMUM,FIRST
+      parameter (RANDOM=.FALSE., MAXIMUM_RANDOM=.TRUE., MAXIMUM=.FALSE.)
+c Hypoyhese de recouvrement : MAXIMUM_RANDOM
+      INTEGER flag_max
+      REAL phase3d(klon, klev),dh(klon, klev),pdel(klon, klev),
+     .     zrho(klon, klev)
+      REAL tcc(klon), ftmp(klon), lcc_integrat(klon), height(klon)
+      REAL thres_tau,thres_neb
+      PARAMETER (thres_tau=0.3, thres_neb=0.001)
+      REAL t_tmp
+      REAL gravit
+      PARAMETER (gravit=9.80616)  !m/s2
+      REAL pqlwpcon(klon, klev), pqlwpstra(klon, klev) 
+c
       REAL paprs(klon,klev+1), pplay(klon,klev)
       REAL t(klon,klev)
@@ -475,5 +494,183 @@
          pcl(i)=1.-pcl(i)
       ENDDO
-      
+
+c ========================================================
+! DIAGNOSTICS CALCULATION FOR CMIP5 PROTOCOL
+c ========================================================
+!! change by Nicolas Yan (LSCE) 
+!! Cloud Droplet Number Concentration (CDNC) : 3D variable
+!! Fractionnal cover by liquid water cloud (LCC3D) : 3D variable
+!! Cloud Droplet Number Concentration at top of cloud (CLDNCL) : 2D variable
+!! Droplet effective radius at top of cloud (REFFCLWTOP) : 2D variable
+!! Fractionnal cover by liquid water at top of clouds (LCC) : 2D variable
+      IF (ok_newmicro) THEN
+         IF (ok_aie) THEN
+            DO k = 1, klev
+               DO i = 1, klon
+                  phase3d(i,k)=1-zfice2(i,k)
+                  IF (pclc(i,k) .LE. seuil_neb) THEN
+                     lcc3d(i,k)=seuil_neb*phase3d(i,k)
+                  ELSE
+                     lcc3d(i,k)=pclc(i,k)*phase3d(i,k)
+                  ENDIF
+                  scdnc(i,k)=lcc3d(i,k)*cdnc(i,k) ! m-3
+               ENDDO
+            ENDDO
+
+            DO i=1,klon
+               lcc(i)=0.
+               reffclwtop(i)=0.
+               cldncl(i)=0.
+               IF(RANDOM .OR. MAXIMUM_RANDOM) tcc(i) = 1.
+               IF(MAXIMUM) tcc(i) = 0.
+            ENDDO
+     
+            FIRST=.TRUE.
+
+            DO i=1,klon
+               DO k=klev-1,1,-1 !From TOA down
+
+
+            ! Test, if the cloud optical depth exceeds the necessary
+            ! threshold:
+
+             IF (pcltau(i,k).GT.thres_tau .AND. pclc(i,k).GT.thres_neb)
+     .                                                             THEN
+               ! To calculate the right Temperature at cloud top,
+               ! interpolate it between layers:
+                  t_tmp = t(i,k) +
+     .              (paprs(i,k+1)-pplay(i,k))/(pplay(i,k+1)-pplay(i,k))
+     .              * ( t(i,k+1) - t(i,k) )
+
+                  IF(MAXIMUM) THEN
+                    IF(FIRST) THEN
+                       write(*,*)'Hypothese de recouvrement: MAXIMUM'
+                       FIRST=.FALSE.
+                    ENDIF
+                    flag_max= -1.
+                    ftmp(i) = MAX(tcc(i),pclc(i,k))
+                  ENDIF
+
+                  IF(RANDOM) THEN
+                    IF(FIRST) THEN
+                       write(*,*)'Hypothese de recouvrement: RANDOM'
+                       FIRST=.FALSE.
+                    ENDIF
+                    flag_max= 1.
+                    ftmp(i) = tcc(i) * (1-pclc(i,k))
+                  ENDIF
+
+                  IF(MAXIMUM_RANDOM) THEN
+                    IF(FIRST) THEN
+                       write(*,*)'Hypothese de recouvrement: MAXIMUM_
+     .                         RANDOM'
+                       FIRST=.FALSE.
+                    ENDIF
+                    flag_max= 1.
+                    ftmp(i) = tcc(i) *
+     .              (1. - MAX(pclc(i,k),pclc(i,k+1))) /
+     .              (1. - MIN(pclc(i,k+1),1.-thres_neb))
+                  ENDIF
+c Effective radius of cloud droplet at top of cloud (m)
+                  reffclwtop(i) = reffclwtop(i) + rad_chaud_tab(i,k) * 
+     .           1.0E-06 * phase3d(i,k) * ( tcc(i) - ftmp(i))*flag_max
+c CDNC at top of cloud (m-3)
+                  cldncl(i) = cldncl(i) + cdnc(i,k) * phase3d(i,k) * 
+     .                 (tcc(i) - ftmp(i))*flag_max
+c Liquid Cloud Content at top of cloud
+                  lcc(i) = lcc(i) + phase3d(i,k) * (tcc(i)-ftmp(i))*
+     .                    flag_max
+c Total Cloud Content at top of cloud
+                  tcc(i)=ftmp(i)
+              
+          ENDIF ! is there a visible, not-too-small cloud?  
+          ENDDO ! loop over k
+
+          IF(RANDOM .OR. MAXIMUM_RANDOM) tcc(i)=1.-tcc(i)
+         ENDDO ! loop over i
+
+!! Convective and Stratiform Cloud Droplet Effective Radius (REFFCLWC  REFFCLWS)
+            DO i = 1, klon
+               DO k = 1, klev
+                  pqlwpcon(i,k)=rnebcon(i,k)*clwcon(i,k) ! fraction eau liquide convective
+                  pqlwpstra(i,k)=pclc(i,k)*phase3d(i,k)-pqlwpcon(i,k) ! fraction eau liquide stratiforme
+                  IF (pqlwpstra(i,k) .LE. 0.0) pqlwpstra(i,k)=0.0
+! Convective Cloud Droplet Effective Radius (REFFCLWC) : variable 3D
+                  reffclwc(i,k)=1.1
+     &                 *((pqlwpcon(i,k)*pplay(i,k)/(RD * T(i,k)))
+     &                 /(4./3*RPI*1000.*cdnc(i,k)) )**(1./3.)
+                  reffclwc(i,k) = MAX(reffclwc(i,k) * 1e6, 5.)
+
+! Stratiform Cloud Droplet Effective Radius (REFFCLWS) : variable 3D
+                  IF ((pclc(i,k)-rnebcon(i,k)) .LE. seuil_neb) THEN ! tout sous la forme convective
+                     reffclws(i,k)=0.0
+                     lcc3dstra(i,k)= 0.0
+                  ELSE
+                     reffclws(i,k) = (pclc(i,k)*phase3d(i,k)*
+     &                               rad_chaud_tab(i,k)-
+     &                            pqlwpcon(i,k)*reffclwc(i,k))
+                     IF(reffclws(i,k) .LE. 0.0) reffclws(i,k)=0.0
+                     lcc3dstra(i,k)=pqlwpstra(i,k)
+                 ENDIF
+!Convertion from um to m
+                  IF(rnebcon(i,k). LE. seuil_neb) THEN
+                    reffclwc(i,k) = reffclwc(i,k)*seuil_neb*clwcon(i,k)
+     &                              *1.0E-06
+                    lcc3dcon(i,k)= seuil_neb*clwcon(i,k)
+                  ELSE
+                    reffclwc(i,k) = reffclwc(i,k)*pqlwpcon(i,k)
+     &                              *1.0E-06
+                    lcc3dcon(i,k) = pqlwpcon(i,k)
+                  ENDIF
+
+                  reffclws(i,k) = reffclws(i,k)*1.0E-06
+
+               ENDDO !klev
+            ENDDO !klon 
+
+!! Column Integrated Cloud Droplet Number (CLDNVI) : variable 2D
+            DO k = 1, klev
+               DO i = 1, klon
+                   pdel(i,k) = paprs(i,k)-paprs(i,k+1)
+                   zrho(i,k)=pplay(i,k)/t(i,k)/RD                  ! kg/m3
+                   dh(i,k)=pdel(i,k)/(gravit*zrho(i,k)) ! hauteur de chaque boite (m)
+               ENDDO
+            ENDDO
+c
+            DO i = 1, klon
+               cldnvi(i)=0.
+               lcc_integrat(i)=0.
+               height(i)=0.
+               DO k = 1, klev
+                  cldnvi(i)=cldnvi(i)+cdnc(i,k)*lcc3d(i,k)*dh(i,k)
+                  lcc_integrat(i)=lcc_integrat(i)+lcc3d(i,k)*dh(i,k)
+                  height(i)=height(i)+dh(i,k)
+               ENDDO ! klev
+               lcc_integrat(i)=lcc_integrat(i)/height(i)
+               IF (lcc_integrat(i) .LE. 1.0E-03) THEN
+                  cldnvi(i)=cldnvi(i)*lcc(i)/seuil_neb
+               ELSE
+                  cldnvi(i)=cldnvi(i)*lcc(i)/lcc_integrat(i)
+               ENDIF
+            ENDDO ! klon
+            
+            DO i = 1, klon
+               DO k = 1, klev
+                IF (scdnc(i,k) .LE. 0.0) scdnc(i,k)=0.0
+                IF (reffclws(i,k) .LE. 0.0) reffclws(i,k)=0.0
+                IF (reffclwc(i,k) .LE. 0.0) reffclwc(i,k)=0.0
+                IF (lcc3d(i,k) .LE. 0.0) lcc3d(i,k)=0.0
+                IF (lcc3dcon(i,k) .LE. 0.0) lcc3dcon(i,k)=0.0
+                IF (lcc3dstra(i,k) .LE. 0.0) lcc3dstra(i,k)=0.0
+               ENDDO
+               IF (reffclwtop(i) .LE. 0.0) reffclwtop(i)=0.0
+               IF (cldncl(i) .LE. 0.0) cldncl(i)=0.0
+               IF (cldnvi(i) .LE. 0.0) cldnvi(i)=0.0
+               IF (lcc(i) .LE. 0.0) lcc(i)=0.0
+            ENDDO
+
+         ENDIF !ok_aie
+      ENDIF !ok newmicro
+c
 C
       RETURN
Index: LMDZ4/trunk/libf/phylmd/phys_local_var_mod.F90
===================================================================
--- LMDZ4/trunk/libf/phylmd/phys_local_var_mod.F90	(revision 1336)
+++ LMDZ4/trunk/libf/phylmd/phys_local_var_mod.F90	(revision 1337)
@@ -88,4 +88,78 @@
       REAL, SAVE, ALLOCATABLE :: tau3d_aero(:,:,:,:) 
       !$OMP THREADPRIVATE(tau3d_aero) 
+      REAL, SAVE, ALLOCATABLE :: scdnc(:,:)
+      !$OMP THREADPRIVATE(scdnc)
+      REAL, SAVE, ALLOCATABLE :: cldncl(:)
+      !$OMP THREADPRIVATE(cldncl)
+      REAL, SAVE, ALLOCATABLE :: reffclwtop(:)
+      !$OMP THREADPRIVATE(reffclwtop)
+      REAL, SAVE, ALLOCATABLE :: lcc(:)
+      !$OMP THREADPRIVATE(lcc)
+      REAL, SAVE, ALLOCATABLE :: reffclws(:,:)
+      !$OMP THREADPRIVATE(reffclws)
+      REAL, SAVE, ALLOCATABLE :: reffclwc(:,:)
+      !$OMP THREADPRIVATE(reffclwc)
+      REAL, SAVE, ALLOCATABLE :: cldnvi(:) 
+      !$OMP THREADPRIVATE(cldnvi)
+      REAL, SAVE, ALLOCATABLE :: lcc3d(:,:)
+      !$OMP THREADPRIVATE(lcc3d)
+      REAL, SAVE, ALLOCATABLE :: lcc3dcon(:,:)
+      !$OMP THREADPRIVATE(lcc3dcon)
+      REAL, SAVE, ALLOCATABLE :: lcc3dstra(:,:)
+      !$OMP THREADPRIVATE(lcc3dstra)
+      REAL, SAVE, ALLOCATABLE :: od550aer(:) 
+      !$OMP THREADPRIVATE(od550aer) 
+      REAL, SAVE, ALLOCATABLE :: absvisaer(:) 
+      !$OMP THREADPRIVATE(absvisaer) 
+      REAL, SAVE, ALLOCATABLE :: od865aer(:) 
+      !$OMP THREADPRIVATE(od865aer) 
+      REAL, SAVE, ALLOCATABLE :: ec550aer(:,:) 
+      !$OMP THREADPRIVATE(ec550aer) 
+      REAL, SAVE, ALLOCATABLE :: od550lt1aer(:) 
+      !$OMP THREADPRIVATE(od550lt1aer) 
+      REAL, SAVE, ALLOCATABLE :: sconcso4(:) 
+      !$OMP THREADPRIVATE(sconcso4) 
+      REAL, SAVE, ALLOCATABLE :: sconcoa(:) 
+      !$OMP THREADPRIVATE(sconcoa) 
+      REAL, SAVE, ALLOCATABLE :: sconcbc(:) 
+      !$OMP THREADPRIVATE(sconcbc) 
+      REAL, SAVE, ALLOCATABLE :: sconcss(:) 
+      !$OMP THREADPRIVATE(sconcss) 
+      REAL, SAVE, ALLOCATABLE :: sconcdust(:) 
+      !$OMP THREADPRIVATE(sconcdust) 
+      REAL, SAVE, ALLOCATABLE :: concso4(:,:) 
+      !$OMP THREADPRIVATE(concso4) 
+      REAL, SAVE, ALLOCATABLE :: concoa(:,:) 
+      !$OMP THREADPRIVATE(concoa) 
+      REAL, SAVE, ALLOCATABLE :: concbc(:,:) 
+      !$OMP THREADPRIVATE(concbc) 
+      REAL, SAVE, ALLOCATABLE :: concss(:,:) 
+      !$OMP THREADPRIVATE(concss) 
+      REAL, SAVE, ALLOCATABLE :: concdust(:,:) 
+      !$OMP THREADPRIVATE(concdust) 
+      REAL, SAVE, ALLOCATABLE :: loadso4(:) 
+      !$OMP THREADPRIVATE(loadso4) 
+      REAL, SAVE, ALLOCATABLE :: loadoa(:) 
+      !$OMP THREADPRIVATE(loadoa) 
+      REAL, SAVE, ALLOCATABLE :: loadbc(:) 
+      !$OMP THREADPRIVATE(loadbc) 
+      REAL, SAVE, ALLOCATABLE :: loadss(:) 
+      !$OMP THREADPRIVATE(loadss) 
+      REAL, SAVE, ALLOCATABLE :: loaddust(:) 
+      !$OMP THREADPRIVATE(loaddust) 
+      REAL, SAVE, ALLOCATABLE :: load_tmp1(:) 
+      !$OMP THREADPRIVATE(load_tmp1) 
+      REAL, SAVE, ALLOCATABLE :: load_tmp2(:) 
+      !$OMP THREADPRIVATE(load_tmp2) 
+      REAL, SAVE, ALLOCATABLE :: load_tmp3(:) 
+      !$OMP THREADPRIVATE(load_tmp3) 
+      REAL, SAVE, ALLOCATABLE :: load_tmp4(:) 
+      !$OMP THREADPRIVATE(load_tmp4) 
+      REAL, SAVE, ALLOCATABLE :: load_tmp5(:) 
+      !$OMP THREADPRIVATE(load_tmp5) 
+      REAL, SAVE, ALLOCATABLE :: load_tmp6(:) 
+      !$OMP THREADPRIVATE(load_tmp6) 
+      REAL, SAVE, ALLOCATABLE :: load_tmp7(:) 
+      !$OMP THREADPRIVATE(load_tmp7) 
 
 CONTAINS
@@ -131,4 +205,41 @@
       allocate(tausum_aero(klon,nwave,naero_spc))
       allocate(tau3d_aero(klon,klev,nwave,naero_spc)) 
+      allocate(scdnc(klon, klev))
+      allocate(cldncl(klon))
+      allocate(reffclwtop(klon))
+      allocate(lcc(klon))
+      allocate(reffclws(klon, klev))
+      allocate(reffclwc(klon, klev))
+      allocate(cldnvi(klon))
+      allocate(lcc3d(klon, klev))
+      allocate(lcc3dcon(klon, klev))
+      allocate(lcc3dstra(klon, klev))
+      allocate(od550aer(klon))	 
+      allocate(od865aer(klon))	 
+      allocate(absvisaer(klon))	 
+      allocate(ec550aer(klon,klev))
+      allocate(od550lt1aer(klon))	 	 
+      allocate(sconcso4(klon))
+      allocate(sconcoa(klon))
+      allocate(sconcbc(klon))
+      allocate(sconcss(klon))
+      allocate(sconcdust(klon))
+      allocate(concso4(klon,klev))
+      allocate(concoa(klon,klev))
+      allocate(concbc(klon,klev))
+      allocate(concss(klon,klev))
+      allocate(concdust(klon,klev))
+      allocate(loadso4(klon))
+      allocate(loadoa(klon))
+      allocate(loadbc(klon))
+      allocate(loadss(klon))
+      allocate(loaddust(klon))
+      allocate(load_tmp1(klon))
+      allocate(load_tmp2(klon))
+      allocate(load_tmp3(klon))
+      allocate(load_tmp4(klon))
+      allocate(load_tmp5(klon))
+      allocate(load_tmp6(klon))
+      allocate(load_tmp7(klon))
 
 END SUBROUTINE phys_local_var_init
@@ -170,4 +281,41 @@
       deallocate(tausum_aero) 
       deallocate(tau3d_aero) 
+      deallocate(scdnc)
+      deallocate(cldncl)
+      deallocate(reffclwtop)
+      deallocate(lcc)
+      deallocate(reffclws)
+      deallocate(reffclwc)
+      deallocate(cldnvi)
+      deallocate(lcc3d)
+      deallocate(lcc3dcon)
+      deallocate(lcc3dstra)
+      deallocate(od550aer)	 
+      deallocate(od865aer)
+      deallocate(absvisaer)
+      deallocate(ec550aer)
+      deallocate(od550lt1aer)
+      deallocate(sconcso4) 
+      deallocate(sconcoa) 
+      deallocate(sconcbc) 
+      deallocate(sconcss) 
+      deallocate(sconcdust) 
+      deallocate(concso4) 
+      deallocate(concoa) 
+      deallocate(concbc) 
+      deallocate(concss) 
+      deallocate(concdust) 
+      deallocate(loadso4) 
+      deallocate(loadoa) 
+      deallocate(loadbc) 
+      deallocate(loadss) 
+      deallocate(loaddust) 
+      deallocate(load_tmp1)
+      deallocate(load_tmp2)
+      deallocate(load_tmp3)
+      deallocate(load_tmp4)
+      deallocate(load_tmp5)
+      deallocate(load_tmp6)
+      deallocate(load_tmp7)
       deallocate(d_u_hin,d_v_hin,d_t_hin)
 
Index: LMDZ4/trunk/libf/phylmd/phys_output_mod.F90
===================================================================
--- LMDZ4/trunk/libf/phylmd/phys_output_mod.F90	(revision 1336)
+++ LMDZ4/trunk/libf/phylmd/phys_output_mod.F90	(revision 1337)
@@ -356,34 +356,61 @@
   type(ctrl_out),save :: o_solswai      = ctrl_out((/ 2, 10, 10, 10, 10 /),'solswai')
 
-  type(ctrl_out),save,dimension(10) :: o_tausumaero  = (/ ctrl_out((/ 4, 10, 10, 10, 10 /),'OD550_ASBCM'), &
-                                                     ctrl_out((/ 4, 10, 10, 10, 10 /),'OD550_ASPOMM'), &
-                                                     ctrl_out((/ 4, 10, 10, 10, 10 /),'OD550_ASSO4M'), &
-                                                     ctrl_out((/ 4, 10, 10, 10, 10 /),'OD550_CSSO4M'), &
-                                                     ctrl_out((/ 4, 10, 10, 10, 10 /),'OD550_SSSSM'), &
-                                                     ctrl_out((/ 4, 10, 10, 10, 10 /),'OD550_ASSSM'), &
-                                                     ctrl_out((/ 4, 10, 10, 10, 10 /),'OD550_CSSSM'), &
-                                                     ctrl_out((/ 4, 10, 10, 10, 10 /),'OD550_CIDUSTM'), &
-                                                     ctrl_out((/ 4, 10, 10, 10, 10 /),'OD550_AIBCM'), &
-                                                     ctrl_out((/ 4, 10, 10, 10, 10 /),'OD550_AIPOMM') /)
-
-  type(ctrl_out),save :: o_swtoaas_nat      = ctrl_out((/ 4, 10, 10, 10, 10 /),'swtoaas_nat')
-  type(ctrl_out),save :: o_swsrfas_nat      = ctrl_out((/ 4, 10, 10, 10, 10 /),'swsrfas_nat')
-  type(ctrl_out),save :: o_swtoacs_nat      = ctrl_out((/ 4, 10, 10, 10, 10 /),'swtoacs_nat')
-  type(ctrl_out),save :: o_swsrfcs_nat      = ctrl_out((/ 4, 10, 10, 10, 10 /),'swsrfcs_nat')
-
-  type(ctrl_out),save :: o_swtoaas_ant      = ctrl_out((/ 4, 10, 10, 10, 10 /),'swtoaas_ant')
-  type(ctrl_out),save :: o_swsrfas_ant      = ctrl_out((/ 4, 10, 10, 10, 10 /),'swsrfas_ant')
-  type(ctrl_out),save :: o_swtoacs_ant      = ctrl_out((/ 4, 10, 10, 10, 10 /),'swtoacs_ant')
-  type(ctrl_out),save :: o_swsrfcs_ant      = ctrl_out((/ 4, 10, 10, 10, 10 /),'swsrfcs_ant')
-
-  type(ctrl_out),save :: o_swtoacf_nat      = ctrl_out((/ 4, 10, 10, 10, 10 /),'swtoacf_nat')
-  type(ctrl_out),save :: o_swsrfcf_nat      = ctrl_out((/ 4, 10, 10, 10, 10 /),'swsrfcf_nat')
-  type(ctrl_out),save :: o_swtoacf_ant      = ctrl_out((/ 4, 10, 10, 10, 10 /),'swtoacf_ant')
-  type(ctrl_out),save :: o_swsrfcf_ant      = ctrl_out((/ 4, 10, 10, 10, 10 /),'swsrfcf_ant')
-  type(ctrl_out),save :: o_swtoacf_zero      = ctrl_out((/ 4, 10, 10, 10, 10 /),'swtoacf_zero')
-  type(ctrl_out),save :: o_swsrfcf_zero      = ctrl_out((/ 4, 10, 10, 10, 10 /),'swsrfcf_zero')
+  type(ctrl_out),save,dimension(10) :: o_tausumaero  = (/ ctrl_out((/ 4, 4, 10, 10, 10 /),'OD550_ASBCM'), &
+                                                     ctrl_out((/ 4, 4, 10, 10, 10 /),'OD550_ASPOMM'), &
+                                                     ctrl_out((/ 4, 4, 10, 10, 10 /),'OD550_ASSO4M'), &
+                                                     ctrl_out((/ 4, 4, 10, 10, 10 /),'OD550_CSSO4M'), &
+                                                     ctrl_out((/ 4, 4, 10, 10, 10 /),'OD550_SSSSM'), &
+                                                     ctrl_out((/ 4, 4, 10, 10, 10 /),'OD550_ASSSM'), &
+                                                     ctrl_out((/ 4, 4, 10, 10, 10 /),'OD550_CSSSM'), &
+                                                     ctrl_out((/ 4, 4, 10, 10, 10 /),'OD550_CIDUSTM'), &
+                                                     ctrl_out((/ 4, 4, 10, 10, 10 /),'OD550_AIBCM'), &
+                                                     ctrl_out((/ 4, 4, 10, 10, 10 /),'OD550_AIPOMM') /)
+
+  type(ctrl_out),save :: o_od550aer         = ctrl_out((/ 4, 4, 10, 10, 10 /),'od550aer')
+  type(ctrl_out),save :: o_od865aer         = ctrl_out((/ 4, 4, 10, 10, 10 /),'od865aer')
+  type(ctrl_out),save :: o_absvisaer        = ctrl_out((/ 4, 4, 10, 10, 10 /),'absvisaer')
+  type(ctrl_out),save :: o_od550lt1aer      = ctrl_out((/ 4, 4, 10, 10, 10 /),'od550lt1aer')
+
+  type(ctrl_out),save :: o_sconcso4         = ctrl_out((/ 4, 4, 10, 10, 10 /),'sconcso4')
+  type(ctrl_out),save :: o_sconcoa          = ctrl_out((/ 4, 4, 10, 10, 10 /),'sconcoa')
+  type(ctrl_out),save :: o_sconcbc          = ctrl_out((/ 4, 4, 10, 10, 10 /),'sconcbc')
+  type(ctrl_out),save :: o_sconcss          = ctrl_out((/ 4, 4, 10, 10, 10 /),'sconcss')
+  type(ctrl_out),save :: o_sconcdust        = ctrl_out((/ 4, 4, 10, 10, 10 /),'sconcdust')
+  type(ctrl_out),save :: o_concso4          = ctrl_out((/ 4, 4, 10, 10, 10 /),'concso4')
+  type(ctrl_out),save :: o_concoa           = ctrl_out((/ 4, 4, 10, 10, 10 /),'concoa')
+  type(ctrl_out),save :: o_concbc           = ctrl_out((/ 4, 4, 10, 10, 10 /),'concbc')
+  type(ctrl_out),save :: o_concss           = ctrl_out((/ 4, 4, 10, 10, 10 /),'concss')
+  type(ctrl_out),save :: o_concdust         = ctrl_out((/ 4, 4, 10, 10, 10 /),'concdust')
+  type(ctrl_out),save :: o_loadso4          = ctrl_out((/ 4, 4, 10, 10, 10 /),'loadso4')
+  type(ctrl_out),save :: o_loadoa           = ctrl_out((/ 4, 4, 10, 10, 10 /),'loadoa')
+  type(ctrl_out),save :: o_loadbc           = ctrl_out((/ 4, 4, 10, 10, 10 /),'loadbc')
+  type(ctrl_out),save :: o_loadss           = ctrl_out((/ 4, 4, 10, 10, 10 /),'loadss')
+  type(ctrl_out),save :: o_loaddust         = ctrl_out((/ 4, 4, 10, 10, 10 /),'loaddust')
+
+  type(ctrl_out),save :: o_swtoaas_nat      = ctrl_out((/ 4, 4, 10, 10, 10 /),'swtoaas_nat')
+  type(ctrl_out),save :: o_swsrfas_nat      = ctrl_out((/ 4, 4, 10, 10, 10 /),'swsrfas_nat')
+  type(ctrl_out),save :: o_swtoacs_nat      = ctrl_out((/ 4, 4, 10, 10, 10 /),'swtoacs_nat')
+  type(ctrl_out),save :: o_swsrfcs_nat      = ctrl_out((/ 4, 4, 10, 10, 10 /),'swsrfcs_nat')
+
+  type(ctrl_out),save :: o_swtoaas_ant      = ctrl_out((/ 4, 4, 10, 10, 10 /),'swtoaas_ant')
+  type(ctrl_out),save :: o_swsrfas_ant      = ctrl_out((/ 4, 4, 10, 10, 10 /),'swsrfas_ant')
+  type(ctrl_out),save :: o_swtoacs_ant      = ctrl_out((/ 4, 4, 10, 10, 10 /),'swtoacs_ant')
+  type(ctrl_out),save :: o_swsrfcs_ant      = ctrl_out((/ 4, 4, 10, 10, 10 /),'swsrfcs_ant')
+
+  type(ctrl_out),save :: o_swtoacf_nat      = ctrl_out((/ 4, 4, 10, 10, 10 /),'swtoacf_nat')
+  type(ctrl_out),save :: o_swsrfcf_nat      = ctrl_out((/ 4, 4, 10, 10, 10 /),'swsrfcf_nat')
+  type(ctrl_out),save :: o_swtoacf_ant      = ctrl_out((/ 4, 4, 10, 10, 10 /),'swtoacf_ant')
+  type(ctrl_out),save :: o_swsrfcf_ant      = ctrl_out((/ 4, 4, 10, 10, 10 /),'swsrfcf_ant')
+  type(ctrl_out),save :: o_swtoacf_zero     = ctrl_out((/ 4, 4, 10, 10, 10 /),'swtoacf_zero')
+  type(ctrl_out),save :: o_swsrfcf_zero     = ctrl_out((/ 4, 4, 10, 10, 10 /),'swsrfcf_zero')
+
+  type(ctrl_out),save :: o_cldncl          = ctrl_out((/ 4, 4, 10, 10, 10 /),'cldncl')
+  type(ctrl_out),save :: o_reffclwtop      = ctrl_out((/ 4, 4, 10, 10, 10 /),'reffclwtop')
+  type(ctrl_out),save :: o_cldnvi          = ctrl_out((/ 4, 4, 10, 10, 10 /),'cldnvi')
+  type(ctrl_out),save :: o_lcc             = ctrl_out((/ 4, 4, 10, 10, 10 /),'lcc')
 
 
 !!!!!!!!!!!!!!!!!!!!!! 3D !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 
+  type(ctrl_out),save :: o_ec550aer     = ctrl_out((/ 4,  4, 10, 10, 1 /),'ec550aer')
   type(ctrl_out),save :: o_lwcon        = ctrl_out((/ 2, 5, 10, 10, 1 /),'lwcon')
   type(ctrl_out),save :: o_iwcon        = ctrl_out((/ 2, 5, 10, 10, 10 /),'iwcon')
@@ -413,4 +440,10 @@
   type(ctrl_out),save :: o_re           =ctrl_out((/ 5, 10, 10, 10, 10 /),'re')
   type(ctrl_out),save :: o_fl           =ctrl_out((/ 5, 10, 10, 10, 10 /),'fl')
+  type(ctrl_out),save :: o_scdnc        =ctrl_out((/ 4,  4, 10, 10, 1 /),'scdnc')
+  type(ctrl_out),save :: o_reffclws     =ctrl_out((/ 4,  4, 10, 10, 1 /),'reffclws')
+  type(ctrl_out),save :: o_reffclwc     =ctrl_out((/ 4,  4, 10, 10, 1 /),'reffclwc')
+  type(ctrl_out),save :: o_lcc3d        =ctrl_out((/ 4,  4, 10, 10, 1 /),'lcc3d')
+  type(ctrl_out),save :: o_lcc3dcon     =ctrl_out((/ 4,  4, 10, 10, 1 /),'lcc3dcon')
+  type(ctrl_out),save :: o_lcc3dstra    =ctrl_out((/ 4,  4, 10, 10, 1 /),'lcc3dstra')
 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 
@@ -863,4 +896,27 @@
 
 IF (new_aod .AND. (.NOT. aerosol_couple)) THEN
+
+  CALL histdef2d(iff,o_od550aer%flag,o_od550aer%name, "Total aerosol optical depth at 550nm", "-")
+  CALL histdef2d(iff,o_od865aer%flag,o_od865aer%name, "Total aerosol optical depth at 870nm", "-")
+  CALL histdef2d(iff,o_absvisaer%flag,o_absvisaer%name, "Absorption aerosol visible optical depth", "-")
+  CALL histdef2d(iff,o_od550lt1aer%flag,o_od550lt1aer%name, "Fine mode optical depth", "-")
+
+
+  CALL histdef2d(iff,o_sconcso4%flag,o_sconcso4%name,"Surface Concentration of Sulfate ","kg/m3")
+  CALL histdef2d(iff,o_sconcoa%flag,o_sconcoa%name,"Surface Concentration of Organic Aerosol ","kg/m3")
+  CALL histdef2d(iff,o_sconcbc%flag,o_sconcbc%name,"Surface Concentration of Black Carbon ","kg/m3")
+  CALL histdef2d(iff,o_sconcss%flag,o_sconcss%name,"Surface Concentration of Sea Salt ","kg/m3")
+  CALL histdef2d(iff,o_sconcdust%flag,o_sconcdust%name,"Surface Concentration of Dust ","kg/m3")
+  CALL histdef3d(iff,o_concso4%flag,o_concso4%name,"Concentration of Sulfate ","kg/m3")
+  CALL histdef3d(iff,o_concoa%flag,o_concoa%name,"Concentration of Organic Aerosol ","kg/m3")
+  CALL histdef3d(iff,o_concbc%flag,o_concbc%name,"Concentration of Black Carbon ","kg/m3")
+  CALL histdef3d(iff,o_concss%flag,o_concss%name,"Concentration of Sea Salt ","kg/m3")
+  CALL histdef3d(iff,o_concdust%flag,o_concdust%name,"Concentration of Dust ","kg/m3")
+  CALL histdef2d(iff,o_loadso4%flag,o_loadso4%name,"Column Load of Sulfate ","kg/m2")
+  CALL histdef2d(iff,o_loadoa%flag,o_loadoa%name,"Column Load of Organic Aerosol ","kg/m2")
+  CALL histdef2d(iff,o_loadbc%flag,o_loadbc%name,"Column Load of Black Carbon ","kg/m2")
+  CALL histdef2d(iff,o_loadss%flag,o_loadss%name,"Column Load of Sea Salt ","kg/m2")
+  CALL histdef2d(iff,o_loaddust%flag,o_loaddust%name,"Column Load of Dust ","kg/m2")
+
   DO naero = 1, naero_spc
   CALL histdef2d(iff,o_tausumaero(naero)%flag,o_tausumaero(naero)%name,"Aerosol Optical depth at 550 nm "//name_aero(naero),"1")
@@ -896,4 +952,15 @@
   CALL histdef2d(iff,o_topswai%flag,o_topswai%name, "AIE at TOA", "W/m2")
   CALL histdef2d(iff,o_solswai%flag,o_solswai%name, "AIE at SFR", "W/m2")
+!Cloud droplet number concentration
+  CALL histdef3d(iff,o_scdnc%flag,o_scdnc%name, "Cloud droplet number concentration","m-3")
+  CALL histdef2d(iff,o_cldncl%flag,o_cldncl%name, "CDNC at top of liquid water cloud", "m-3")
+  CALL histdef3d(iff,o_reffclws%flag,o_reffclws%name, "Stratiform Cloud Droplet Effective Radius","m")
+  CALL histdef3d(iff,o_reffclwc%flag,o_reffclwc%name, "Convective Cloud Droplet Effective Radius","m")
+  CALL histdef2d(iff,o_cldnvi%flag,o_cldnvi%name, "Column Integrated Cloud Droplet Number", "m-2")
+  CALL histdef3d(iff,o_lcc3d%flag,o_lcc3d%name, "Cloud liquid fraction","1")
+  CALL histdef3d(iff,o_lcc3dcon%flag,o_lcc3dcon%name, "Convective cloud liquid fraction","1")
+  CALL histdef3d(iff,o_lcc3dstra%flag,o_lcc3dstra%name, "Stratiform cloud liquid fraction","1")
+  CALL histdef2d(iff,o_lcc%flag,o_lcc%name, "Cloud liquid fraction at top of cloud","1")
+  CALL histdef2d(iff,o_reffclwtop%flag,o_reffclwtop%name, "Droplet effective radius at top of liquid water cloud", "m")
  ENDIF
 
@@ -1025,4 +1092,5 @@
 
 ! Champs 3D:
+ CALL histdef3d(iff,o_ec550aer%flag,o_ec550aer%name, "Extinction at 550nm", "m^-1")
  CALL histdef3d(iff,o_lwcon%flag,o_lwcon%name, "Cloud liquid water content", "kg/kg")
  CALL histdef3d(iff,o_iwcon%flag,o_iwcon%name, "Cloud ice water content", "kg/kg")
Index: LMDZ4/trunk/libf/phylmd/phys_output_write.h
===================================================================
--- LMDZ4/trunk/libf/phylmd/phys_output_write.h	(revision 1336)
+++ LMDZ4/trunk/libf/phylmd/phys_output_write.h	(revision 1337)
@@ -914,4 +914,85 @@
 ! OD550 per species
       IF (new_aod .and. (.not. aerosol_couple)) THEN
+
+          IF (o_od550aer%flag(iff)<=lev_files(iff)) THEN
+             CALL histwrite_phy(nid_files(iff),o_od550aer%name,itau_w,
+     $            od550aer)
+          ENDIF
+          IF (o_od865aer%flag(iff)<=lev_files(iff)) THEN
+             CALL histwrite_phy(nid_files(iff),o_od865aer%name,itau_w,
+     $            od865aer)
+          ENDIF
+          IF (o_absvisaer%flag(iff)<=lev_files(iff)) THEN
+             CALL histwrite_phy(nid_files(iff),o_absvisaer%name,itau_w,
+     $            absvisaer)
+          ENDIF
+          IF (o_od550lt1aer%flag(iff)<=lev_files(iff)) THEN
+            CALL histwrite_phy(nid_files(iff),o_od550lt1aer%name,itau_w,
+     $            od550lt1aer)
+          ENDIF
+
+        IF (o_sconcso4%flag(iff)<=lev_files(iff)) THEN
+        CALL histwrite_phy(nid_files(iff),o_sconcso4%name,itau_w,
+     $       sconcso4)
+        ENDIF
+        IF (o_sconcoa%flag(iff)<=lev_files(iff)) THEN
+        CALL histwrite_phy(nid_files(iff),o_sconcoa%name,itau_w,
+     $       sconcoa)
+        ENDIF
+        IF (o_sconcbc%flag(iff)<=lev_files(iff)) THEN
+        CALL histwrite_phy(nid_files(iff),o_sconcbc%name,itau_w,
+     $       sconcbc)
+        ENDIF
+        IF (o_sconcss%flag(iff)<=lev_files(iff)) THEN
+        CALL histwrite_phy(nid_files(iff),o_sconcss%name,itau_w,
+     $       sconcss)
+        ENDIF
+        IF (o_sconcdust%flag(iff)<=lev_files(iff)) THEN
+        CALL histwrite_phy(nid_files(iff),o_sconcdust%name,itau_w,
+     $       sconcdust)
+        ENDIF
+
+        IF (o_concso4%flag(iff)<=lev_files(iff)) THEN
+        CALL histwrite_phy(nid_files(iff),o_concso4%name,itau_w,
+     $       concso4)
+        ENDIF
+        IF (o_concoa%flag(iff)<=lev_files(iff)) THEN
+        CALL histwrite_phy(nid_files(iff),o_concoa%name,itau_w,
+     $       concoa)
+        ENDIF
+        IF (o_concbc%flag(iff)<=lev_files(iff)) THEN
+        CALL histwrite_phy(nid_files(iff),o_concbc%name,itau_w,
+     $       concbc)
+        ENDIF
+        IF (o_concss%flag(iff)<=lev_files(iff)) THEN
+        CALL histwrite_phy(nid_files(iff),o_concss%name,itau_w,
+     $       concss)
+        ENDIF
+        IF (o_concdust%flag(iff)<=lev_files(iff)) THEN
+        CALL histwrite_phy(nid_files(iff),o_concdust%name,itau_w,
+     $       concdust)
+        ENDIF
+
+        IF (o_loadso4%flag(iff)<=lev_files(iff)) THEN
+        CALL histwrite_phy(nid_files(iff),o_loadso4%name,itau_w,
+     $       loadso4)
+        ENDIF
+        IF (o_loadoa%flag(iff)<=lev_files(iff)) THEN
+        CALL histwrite_phy(nid_files(iff),o_loadoa%name,itau_w,
+     $       loadoa)
+        ENDIF
+        IF (o_loadbc%flag(iff)<=lev_files(iff)) THEN
+        CALL histwrite_phy(nid_files(iff),o_loadbc%name,itau_w,
+     $       loadbc)
+        ENDIF
+        IF (o_loadss%flag(iff)<=lev_files(iff)) THEN
+        CALL histwrite_phy(nid_files(iff),o_loadss%name,itau_w,
+     $       loadss)
+        ENDIF
+        IF (o_loaddust%flag(iff)<=lev_files(iff)) THEN
+        CALL histwrite_phy(nid_files(iff),o_loaddust%name,itau_w,
+     $       loaddust)
+        ENDIF
+
       DO naero = 1, naero_spc
           IF (o_tausumaero(naero)%flag(iff)<=lev_files(iff)) THEN
@@ -1024,7 +1105,51 @@
      $            solswai_aero)
           ENDIF
+          IF (o_scdnc%flag(iff)<=lev_files(iff)) THEN
+             CALL histwrite_phy(nid_files(iff),o_scdnc%name,itau_w,
+     $            scdnc)
+          ENDIF
+          IF (o_cldncl%flag(iff)<=lev_files(iff)) THEN
+             CALL histwrite_phy(nid_files(iff),o_cldncl%name,itau_w,
+     $            cldncl)
+          ENDIF
+          IF (o_reffclws%flag(iff)<=lev_files(iff)) THEN
+             CALL histwrite_phy(nid_files(iff),o_reffclws%name,itau_w,
+     $            reffclws)
+          ENDIF
+          IF (o_reffclwc%flag(iff)<=lev_files(iff)) THEN
+             CALL histwrite_phy(nid_files(iff),o_reffclwc%name,itau_w,
+     $            reffclwc)
+          ENDIF
+          IF (o_cldnvi%flag(iff)<=lev_files(iff)) THEN
+             CALL histwrite_phy(nid_files(iff),o_cldnvi%name,itau_w,
+     $            cldnvi)
+          ENDIF
+          IF (o_lcc%flag(iff)<=lev_files(iff)) THEN
+             CALL histwrite_phy(nid_files(iff),o_lcc%name,itau_w,
+     $            lcc)
+          ENDIF
+          IF (o_lcc3d%flag(iff)<=lev_files(iff)) THEN
+             CALL histwrite_phy(nid_files(iff),o_lcc3d%name,itau_w,
+     $            lcc3d)
+          ENDIF
+          IF (o_lcc3dcon%flag(iff)<=lev_files(iff)) THEN
+             CALL histwrite_phy(nid_files(iff),o_lcc3dcon%name,itau_w,
+     $            lcc3dcon)
+          ENDIF
+          IF (o_lcc3dstra%flag(iff)<=lev_files(iff)) THEN
+             CALL histwrite_phy(nid_files(iff),o_lcc3dstra%name,itau_w,
+     $            lcc3dstra)
+          ENDIF
+          IF (o_reffclwtop%flag(iff)<=lev_files(iff)) THEN
+             CALL histwrite_phy(nid_files(iff),o_reffclwtop%name,itau_w,
+     $            reffclwtop)
+          ENDIF
        ENDIF
 
 ! Champs 3D:
+       IF (o_ec550aer%flag(iff)<=lev_files(iff)) THEN
+      CALL histwrite_phy(nid_files(iff),o_ec550aer%name,itau_w,ec550aer)
+       ENDIF
+
        IF (o_lwcon%flag(iff)<=lev_files(iff)) THEN
       CALL histwrite_phy(nid_files(iff),o_lwcon%name,itau_w,flwc)
Index: LMDZ4/trunk/libf/phylmd/readaerosol_interp.F90
===================================================================
--- LMDZ4/trunk/libf/phylmd/readaerosol_interp.F90	(revision 1336)
+++ LMDZ4/trunk/libf/phylmd/readaerosol_interp.F90	(revision 1337)
@@ -1,5 +1,5 @@
 ! $Id$
 !
-SUBROUTINE readaerosol_interp(id_aero, itap, pdtphys, r_day, first, pplay, paprs, t_seri, mass_out, pi_mass_out)
+SUBROUTINE readaerosol_interp(id_aero, itap, pdtphys, r_day, first, pplay, paprs, t_seri, mass_out, pi_mass_out, load_src)
 !
 ! This routine will return the mass concentration at actual day(mass_out) and 
@@ -46,4 +46,5 @@
   REAL, INTENT(OUT) :: mass_out(klon,klev)    ! Mass of aerosol (monthly mean data,from file) [ug AIBCM/m3]
   REAL, INTENT(OUT) :: pi_mass_out(klon,klev) ! Mass of preindustrial aerosol (monthly mean data,from file) [ug AIBCM/m3]
+  REAL, INTENT(OUT) :: load_src(klon) ! Load of aerosol (monthly mean data,from file) [kg/m3]
 !      
 ! Local Variables:
@@ -61,5 +62,5 @@
   REAL                              :: volm      ! Volyme de melange [kg/kg]
   REAL, DIMENSION(klon)             :: psurf_day, pi_psurf_day
-  REAL, DIMENSION(klon)             :: load_src, pi_load_src  ! Mass load at source grid
+  REAL, DIMENSION(klon)             :: pi_load_src  ! Mass load at source grid
   REAL, DIMENSION(klon)             :: load_tgt, load_tgt_test
   REAL, DIMENSION(klon,klev)        :: delp ! pressure difference in each model layer
Index: LMDZ4/trunk/libf/phylmd/readaerosol_optic.F90
===================================================================
--- LMDZ4/trunk/libf/phylmd/readaerosol_optic.F90	(revision 1336)
+++ LMDZ4/trunk/libf/phylmd/readaerosol_optic.F90	(revision 1337)
@@ -14,4 +14,7 @@
   USE dimphy
   USE aero_mod
+  USE phys_local_var_mod, only: sconcso4,sconcoa,sconcbc,sconcss,sconcdust, &
+      concso4,concoa,concbc,concss,concdust,loadso4,loadoa,loadbc,loadss,loaddust, &
+      load_tmp1,load_tmp2,load_tmp3,load_tmp4,load_tmp5,load_tmp6,load_tmp7
   IMPLICIT NONE
 
@@ -76,7 +79,8 @@
        flag_aerosol .EQ. 6 ) THEN 
 
-     CALL readaerosol_interp(id_ASSO4M, itap, pdtphys, rjourvrai, debut, pplay, paprs, t_seri, sulfate, sulfate_pi)
+     CALL readaerosol_interp(id_ASSO4M, itap, pdtphys, rjourvrai, debut, pplay, paprs, t_seri, sulfate, sulfate_pi,loadso4)
   ELSE
      sulfate(:,:) = 0. ; sulfate_pi(:,:) = 0.
+     loadso4=0.
   END IF
 
@@ -86,9 +90,11 @@
 
      ! Get bc aerosol distribution 
-     CALL readaerosol_interp(id_ASBCM, itap, pdtphys, rjourvrai, debut, pplay, paprs, t_seri, bcsol, bcsol_pi )
-     CALL readaerosol_interp(id_AIBCM, itap, pdtphys, rjourvrai, debut, pplay, paprs, t_seri, bcins, bcins_pi )
+     CALL readaerosol_interp(id_ASBCM, itap, pdtphys, rjourvrai, debut, pplay, paprs, t_seri, bcsol, bcsol_pi, load_tmp1 )
+     CALL readaerosol_interp(id_AIBCM, itap, pdtphys, rjourvrai, debut, pplay, paprs, t_seri, bcins, bcins_pi, load_tmp2 )
+     loadbc(:)=load_tmp1(:)+load_tmp2(:)
   ELSE
      bcsol(:,:) = 0. ; bcsol_pi(:,:) = 0.
      bcins(:,:) = 0. ; bcins_pi(:,:) = 0.
+     loadbc=0.
   END IF
 
@@ -98,9 +104,11 @@
        flag_aerosol .EQ. 6 ) THEN
 
-     CALL readaerosol_interp(id_ASPOMM, itap, pdtphys, rjourvrai, debut, pplay, paprs, t_seri, pomsol, pomsol_pi)
-     CALL readaerosol_interp(id_AIPOMM, itap, pdtphys, rjourvrai, debut, pplay, paprs, t_seri, pomins, pomins_pi)
+     CALL readaerosol_interp(id_ASPOMM, itap, pdtphys, rjourvrai, debut, pplay, paprs, t_seri, pomsol, pomsol_pi, load_tmp3)
+     CALL readaerosol_interp(id_AIPOMM, itap, pdtphys, rjourvrai, debut, pplay, paprs, t_seri, pomins, pomins_pi, load_tmp4)
+     loadoa(:)=load_tmp3(:)+load_tmp4(:)
   ELSE
      pomsol(:,:) = 0. ; pomsol_pi(:,:) = 0.
      pomins(:,:) = 0. ; pomins_pi(:,:) = 0.
+     loadoa=0.
   END IF
 
@@ -110,12 +118,13 @@
       flag_aerosol .EQ. 6 ) THEN 
 
-      CALL readaerosol_interp(id_SSSSM ,itap, pdtphys, rjourvrai, debut, pplay, paprs, t_seri, sssupco, sssupco_pi) 
-      CALL readaerosol_interp(id_CSSSM ,itap, pdtphys, rjourvrai, debut, pplay, paprs, t_seri, sscoarse,sscoarse_pi) 
-      CALL readaerosol_interp(id_ASSSM ,itap, pdtphys, rjourvrai, debut, pplay, paprs, t_seri, ssacu, ssacu_pi) 
-
+      CALL readaerosol_interp(id_SSSSM ,itap, pdtphys, rjourvrai, debut, pplay, paprs, t_seri, sssupco, sssupco_pi, load_tmp5) 
+      CALL readaerosol_interp(id_CSSSM ,itap, pdtphys, rjourvrai, debut, pplay, paprs, t_seri, sscoarse,sscoarse_pi, load_tmp6) 
+      CALL readaerosol_interp(id_ASSSM ,itap, pdtphys, rjourvrai, debut, pplay, paprs, t_seri, ssacu, ssacu_pi, load_tmp7) 
+     loadss(:)=load_tmp5(:)+load_tmp6(:)+load_tmp7(:)
   ELSE
      sscoarse(:,:) = 0. ; sscoarse_pi(:,:) = 0. 
      ssacu(:,:)    = 0. ; ssacu_pi(:,:) = 0. 
      sssupco(:,:)  = 0. ; sssupco_pi = 0. 
+     loadss=0.
   ENDIF
 
@@ -124,8 +133,9 @@
       flag_aerosol .EQ. 6 ) THEN 
 
-      CALL readaerosol_interp(id_CIDUSTM, itap, pdtphys, rjourvrai, debut, pplay, paprs, t_seri, cidust, cidust_pi) 
+      CALL readaerosol_interp(id_CIDUSTM, itap, pdtphys, rjourvrai, debut, pplay, paprs, t_seri, cidust, cidust_pi, loaddust) 
 
   ELSE
       cidust(:,:) = 0. ; cidust_pi(:,:) = 0. 
+      loaddust=0.
   ENDIF
 
@@ -198,3 +208,17 @@
   END IF
 
+
+! Diagnostics calculation for CMIP5 protocol
+  sconcso4(:)=m_allaer(:,1,id_ASSO4M)*1.e-9
+  sconcoa(:)=(m_allaer(:,1,id_ASPOMM)+m_allaer(:,1,id_AIPOMM))*1.e-9
+  sconcbc(:)=(m_allaer(:,1,id_ASBCM)+m_allaer(:,1,id_AIBCM))*1.e-9
+  sconcss(:)=(m_allaer(:,1,id_ASSSM)+m_allaer(:,1,id_CSSSM)+m_allaer(:,1,id_SSSSM))*1.e-9
+  sconcdust(:)=m_allaer(:,1,id_CIDUSTM)*1.e-9
+  concso4(:,:)=m_allaer(:,:,id_ASSO4M)*1.e-9
+  concoa(:,:)=(m_allaer(:,:,id_ASPOMM)+m_allaer(:,:,id_AIPOMM))*1.e-9
+  concbc(:,:)=(m_allaer(:,:,id_ASBCM)+m_allaer(:,:,id_AIBCM))*1.e-9
+  concss(:,:)=(m_allaer(:,:,id_ASSSM)+m_allaer(:,:,id_CSSSM)+m_allaer(:,:,id_SSSSM))*1.e-9
+  concdust(:,:)=m_allaer(:,:,id_CIDUSTM)*1.e-9
+
+
 END SUBROUTINE readaerosol_optic
