Index: trunk/LMDZ.PLUTO/libf/phypluto/inifis_mod.F90
===================================================================
--- trunk/LMDZ.PLUTO/libf/phypluto/inifis_mod.F90	(revision 3949)
+++ trunk/LMDZ.PLUTO/libf/phypluto/inifis_mod.F90	(revision 3951)
@@ -1454,7 +1454,7 @@
       call abort_physic(rname, 'if microphysics is on, naerkind must be > 1!', 1)
      endif
-     if ((callmufi).and.(callmuclouds).and..not.(naerkind.gt.2)) then
-      call abort_physic(rname, 'if microphysical clouds are on, naerkind must be > 2!', 1)
-     endif
+     ! if ((callmufi).and.(callmuclouds).and..not.(naerkind.gt.2)) then
+     !  call abort_physic(rname, 'if microphysical clouds are on, naerkind must be > 2!', 1)
+     ! endif
      if (.not.(callmufi.or.haze).and.(optichaze)) then
       call abort_physic(rname, 'if microphysics and haze are off, optichaze must be deactivated!', 1)
Index: trunk/LMDZ.PLUTO/libf/phypluto/initracer.F90
===================================================================
--- trunk/LMDZ.PLUTO/libf/phypluto/initracer.F90	(revision 3949)
+++ trunk/LMDZ.PLUTO/libf/phypluto/initracer.F90	(revision 3951)
@@ -334,4 +334,5 @@
       ! By convention they all have the prefix "mu_" (case sensitive !)
       nmicro = 0
+      nmicro_ices = 0
       IF (callmufi) THEN
          DO iq=1,nq
@@ -351,4 +352,6 @@
             WRITE(*,*) "expected at least 7 tracers (clouds: on),", nmicro, " given"
             CALL abort
+          ELSE
+            nmicro_ices = nmicro - 6
           ENDIF
 
@@ -374,7 +377,13 @@
             ENDIF
          ENDDO
+
+         ! Cloud related indexes initialize in inimufi subroutine.
+         IF (.NOT.ALLOCATED(micro_ice_indx)) ALLOCATE(micro_ice_indx(nmicro_ices))
+         IF (.NOT.ALLOCATED(micro_gas_indx)) ALLOCATE(micro_gas_indx(nmicro_ices))
       
       ELSE
          IF (.NOT.ALLOCATED(micro_indx)) ALLOCATE(micro_indx(nmicro))
+         IF (.NOT.ALLOCATED(micro_ice_indx)) ALLOCATE(micro_ice_indx(nmicro_ices))
+         IF (.NOT.ALLOCATED(micro_gas_indx)) ALLOCATE(micro_gas_indx(nmicro_ices))
       
       ENDIF ! end of callmufi
Index: trunk/LMDZ.PLUTO/libf/phypluto/mp2m_diagnostics.F90
===================================================================
--- trunk/LMDZ.PLUTO/libf/phypluto/mp2m_diagnostics.F90	(revision 3949)
+++ trunk/LMDZ.PLUTO/libf/phypluto/mp2m_diagnostics.F90	(revision 3951)
@@ -23,6 +23,6 @@
   IMPLICIT NONE
 
-  REAL(kind=8), ALLOCATABLE, DIMENSION(:)     :: mp2m_aer_s_prec ! Spherical aerosols precipitations (kg.m-2.s-1).
-  REAL(kind=8), ALLOCATABLE, DIMENSION(:)     :: mp2m_aer_f_prec ! Fractal aerosols precipitations (kg.m-2.s-1).
+  REAL(kind=8), ALLOCATABLE, DIMENSION(:)     :: mp2m_aer_s_prec ! Spherical aerosols precipitation (kg.m-2.s-1).
+  REAL(kind=8), ALLOCATABLE, DIMENSION(:)     :: mp2m_aer_f_prec ! Fractal aerosols precipitation (kg.m-2.s-1).
   REAL(kind=8), ALLOCATABLE, DIMENSION(:,:)   :: mp2m_aer_s_w    ! Spherical aerosol settling velocity (m.s-1).
   REAL(kind=8), ALLOCATABLE, DIMENSION(:,:)   :: mp2m_aer_f_w    ! Fractal aerosol settling velocity (m.s-1).
Index: trunk/LMDZ.PLUTO/libf/phypluto/mp2m_inimufi.F90
===================================================================
--- trunk/LMDZ.PLUTO/libf/phypluto/mp2m_inimufi.F90	(revision 3949)
+++ trunk/LMDZ.PLUTO/libf/phypluto/mp2m_inimufi.F90	(revision 3951)
@@ -1,4 +1,6 @@
 subroutine inimufi(ptimestep)
-  use callkeys_mod, only : call_haze_prod_pCH4, haze_p_prod, haze_tx_prod, haze_rc_prod, haze_rm, haze_df, haze_rho, air_rad
+  use callkeys_mod, only : call_haze_prod_pCH4, haze_p_prod, haze_tx_prod, haze_rc_prod, &
+                           haze_rm, haze_df, haze_rho, air_rad, &
+                           callmuclouds
   use tracer_h
   use comcstfi_mod, only : g, rad, mugaz
@@ -36,4 +38,7 @@
        "mu_m0af              ", "mu_m3af              "/)
   
+  CHARACTER(len=30), DIMENSION(2), PARAMETER :: ccnnames = &
+     (/"mu_m0ccn             ", "mu_m3ccn             "/)
+  
   logical :: err
 
@@ -51,4 +56,14 @@
   ENDDO
 
+  IF (callmuclouds) THEN
+    DO i=1,size(ccnnames)
+      idx = indexOfTracer(TRIM(ccnnames(i)),.false.)
+      IF (idx <= 0) THEN
+        WRITE(*,*) "inimufi: '"//TRIM(ccnnames(i))//"' not found in tracers table."
+        err = .true.
+      ENDIF
+    ENDDO
+  ENDIF
+
   IF (err) THEN
     WRITE(*,*) "You loose in inimufi.F90.... Try again"
@@ -63,10 +78,53 @@
   call mm_initialize(ptimestep,call_haze_prod_pCH4,haze_p_prod,haze_tx_prod,haze_rc_prod, &
                       haze_rm,haze_df,haze_rho,rad,g,air_rad,mugaz*1e-3,                  &
-                      config_mufi)
+                      callmuclouds,config_mufi)
   
-  ! Sanity check for haze model initialization:
-  ! -------------------------------------------
+  !-----------------
+  ! 3. Sanity checks
+  !-----------------
+  
+  ! Haze model initialization
+  ! -------------------------
   write(*,*) 'Number of microphysical tracer nmicro = ',nmicro
   call dumptracers(micro_indx)
+
+  ! Cloud model initialization
+  ! --------------------------
+  if (callmuclouds) then
+    do i = 1, nmicro_ices
+      ! Setup micro_ice_indx:
+      idx = indexOfTracer("mu_m3"//TRIM(mm_spcname(i)),.false.)
+      if (idx <= 0) then
+        write(*,*) "inimufi: 'mu_m3"//TRIM(mm_spcname(i))//"' not found in tracers table."
+        err = .true.
+      else
+        micro_ice_indx(i) = idx
+      endif
+      ! Setup micro_gas_indx:
+      idx = indexOfTracer(TRIM(mm_spcname(i))//"_mugas",.false.)
+      if (idx <= 0) then
+        write(*,*) "inimufi: '"//TRIM(mm_spcname(i))//"' not found in tracers table."
+        err = .true.
+      else
+        micro_gas_indx(i) = idx
+      endif
+    enddo
+
+    ! Check for errors
+    if (err) then
+      write(*,*) "Error in inimufi: tracer not found in table!"
+      STOP
+    endif
+    if (nmicro_ices.ne.mm_nesp) then
+      write(*,*) "Error in inimufi: nmicro_ices not equal to mm_nesp!"
+      STOP
+    endif
+
+    write(*,*) 'Number of microphysical ice tracer nmicro_ices = ',nmicro_ices
+    write(*,*) 'Ices:'
+    call dumptracers(micro_ice_indx)
+    write(*,*) 'Condensable gases:'
+    call dumptracers(micro_gas_indx)
+  endif ! end of callmuclouds
   
 end subroutine inimufi
Index: trunk/LMDZ.PLUTO/libf/phypluto/physiq_mod.F90
===================================================================
--- trunk/LMDZ.PLUTO/libf/phypluto/physiq_mod.F90	(revision 3949)
+++ trunk/LMDZ.PLUTO/libf/phypluto/physiq_mod.F90	(revision 3951)
@@ -68,5 +68,5 @@
                               tracer, UseTurbDiff,                            &
                               global1d, szangle,                              &
-                              callmufi, evol1d
+                              callmufi, callmuclouds, evol1d
 
       use check_fields_mod, only: check_physics_fields
@@ -508,5 +508,5 @@
 
       ! Misc
-      character*2 :: str2
+      character(len=10) :: str
       character(len=10) :: tmp1
       character(len=10) :: tmp2
@@ -2511,10 +2511,22 @@
 
             ! Diagnostics:
-            call write_output("aers_prec","Spherical aerosols precipitations","kg.m-2.s-1",mp2m_aer_s_prec(:))
-            call write_output("aerf_prec","Fractal aerosols precipitations","kg.m-2.s-1",mp2m_aer_f_prec(:))
+            call write_output("aers_prec","Spherical aerosols precipitation","kg.m-2.s-1",mp2m_aer_s_prec(:))
+            call write_output("aerf_prec","Fractal aerosols precipitation","kg.m-2.s-1",mp2m_aer_f_prec(:))
             call write_output("aers_w","Spherical aerosol settling velocity","m.s-1",mp2m_aer_s_w(:,:))
             call write_output("aerf_w","Fractal aerosol settling velocity","m.s-1",mp2m_aer_f_w(:,:))
+            call write_output("aers_flux","Spherical aerosol mass flux","kg.m-2.s-1",mp2m_aer_s_flux(:,:))
+            call write_output("aerf_flux","Fractal aerosol mass flux","kg.m-2.s-1",mp2m_aer_f_flux(:,:))
             call write_output("rcs","Characteristic radius of spherical aerosols","m",mp2m_rc_sph(:,:))
             call write_output("rcf","Characteristic radius of fractal aerosols","m",mp2m_rc_fra(:,:))
+
+            if (callmuclouds) then
+               ! Tracers:
+               call write_output("m0ccn","Density number of cloud condensation nuclei","m-3",zq(:,:,micro_indx(5))*int2ext(:,:))
+               call write_output("m3ccn","Volume of cloud condensation nuclei","m3.m-3",zq(:,:,micro_indx(6))*int2ext(:,:))
+               do iq = 1, size(micro_ice_indx)
+                  str = TRIM(nameOfTracer(micro_ice_indx(iq)))
+                  call write_output("m3"//TRIM(str(6:)),"Volume of "//TRIM(str(6:))//" ice","m3.m-3",zq(:,:,micro_ice_indx(iq))*int2ext(:,:))
+               enddo
+            endif ! end callmuclouds
          endif ! end callmufi
 
Index: trunk/LMDZ.PLUTO/libf/phypluto/tracer_h.F90
===================================================================
--- trunk/LMDZ.PLUTO/libf/phypluto/tracer_h.F90	(revision 3949)
+++ trunk/LMDZ.PLUTO/libf/phypluto/tracer_h.F90	(revision 3951)
@@ -84,8 +84,13 @@
 !$OMP THREADPRIVATE(igcm_eddy1e6,igcm_eddy1e7,igcm_eddy5e7,igcm_eddy1e8,igcm_eddy5e8)
 
-       ! Microphysical model
-       integer, save :: nmicro = 0                 !! Number of microphysics tracers.
-       integer, save, allocatable :: micro_indx(:) !! Indexes of all microphysical tracers
-!$OMP THREADPRIVATE(nmicro)
+       ! Microphysical haze model related
+       integer, save :: nmicro = 0                 ! Number of microphysics tracers.
+       integer, save, allocatable :: micro_indx(:) ! Indexes of all microphysical tracers
+!$OMP THREADPRIVATE(nmicro,micro_indx)
+       ! Microphysical cloud model related
+       integer, save :: nmicro_ices = 0                ! Number of microphysics ice tracers (subset of nmicro).
+       integer, save, allocatable :: micro_ice_indx(:) ! Indexes of microphysical ice tracers
+       integer, save, allocatable :: micro_gas_indx(:) ! Indexes of microphysical gas tracers
+!$OMP THREADPRIVATE(nmicro_ices,micro_ice_indx,micro_gas_indx)
 
        CONTAINS
@@ -166,4 +171,6 @@
           ENDIF
 
+          WRITE(*,"(a)") "local -> global : name"
+
           DO i=1,size(indexes)
              idx = indexes(i)
