Index: trunk/LMDZ.MARS/libf/dyn3d/newstart.F
===================================================================
--- trunk/LMDZ.MARS/libf/dyn3d/newstart.F	(revision 1087)
+++ trunk/LMDZ.MARS/libf/dyn3d/newstart.F	(revision 1088)
@@ -18,5 +18,6 @@
       use ioipsl_getincom, only: getin 
       use infotrac, only: iniadvtrac, nqtot, tnom
-      use tracer_mod, only: noms, igcm_h2o_vap, igcm_h2o_ice
+      use tracer_mod, only: noms, igcm_dust_number, igcm_dust_mass,
+     &                      igcm_h2o_vap, igcm_h2o_ice
       use surfdat_h, only: phisfi, z0, zmea, zstd, zsig, zgam, zthe,
      &                     albedodat, z0_default
@@ -497,4 +498,5 @@
      $ tracer'
       write(*,*) 'q=profile    : specify a profile for a tracer'
+      write(*,*) 'freedust     : rescale dust to a true value'
       write(*,*) 'ini_q        : tracers initialization for chemistry
      $ and water vapour'
@@ -842,4 +844,26 @@
              endif
              
+c       q=profile : initialize tracer with a given profile
+c       --------------------------------------------------
+        else if (trim(modif) .eq. 'freedust') then
+          do l=1,llm
+            do j=1,jjp1
+              do i=1,iip1
+                q(i,j,l,igcm_dust_number)=
+     &                q(i,j,l,igcm_dust_number) * 1e-3 ! grosso modo
+                q(i,j,l,igcm_dust_mass)=
+     &                q(i,j,l,igcm_dust_mass)   * 1e-3 ! grosso modo
+              end do
+            end do
+          end do
+
+         ! We want to have the very same value at lon -180 and lon 180
+          do l = 1,llm
+             do j = 1,jjp1
+                do iq = 1,nqtot
+                   q(iip1,j,l,iq) = q(1,j,l,iq)
+                end do
+             end do
+          end do
 
 c       ini_q : Initialize tracers for chemistry
Index: trunk/LMDZ.MARS/libf/phymars/aeropacity.F
===================================================================
--- trunk/LMDZ.MARS/libf/phymars/aeropacity.F	(revision 1087)
+++ trunk/LMDZ.MARS/libf/phymars/aeropacity.F	(revision 1088)
@@ -205,5 +205,8 @@
 c     Vertical column optical depth at "odpref" Pa 
 c     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-      IF(iaervar.eq.1) THEN 
+      IF(freedust) THEN
+         tauref(:) = 0. ! tauref is computed after, instead of being forced
+
+      ELSE IF(iaervar.eq.1) THEN 
          do ig=1, ngrid
           tauref(ig)=max(tauvis,1.e-9) ! tauvis=cste (set in callphys.def
@@ -431,22 +434,28 @@
 c -----------------------------------------------------------------
 
-c     Temporary scaling factor
-      taudusttmp(1:ngrid)=0.
-      DO iaer=1,naerdust
-        DO l=1,nlayer
-          DO ig=1,ngrid
-c           Scaling factor
-            taudusttmp(ig) = taudusttmp(ig) + 
-     &                       aerosol(ig,l,iaerdust(iaer))
-          ENDDO
-        ENDDO
-      ENDDO
-
-c     Saved scaling factor
-      DO ig=1,ngrid
-          tauscaling(ig) = tauref(ig) * 
-     &                     pplev(ig,1) / odpref / taudusttmp(ig)
-c          tauscaling(ig) = 1.e-4
-      ENDDO
+      IF (freedust) THEN
+          tauscaling(:) = 1.
+
+      ELSE
+c       Temporary scaling factor
+        taudusttmp(1:ngrid)=0.
+        DO iaer=1,naerdust
+          DO l=1,nlayer
+            DO ig=1,ngrid
+c             Scaling factor
+              taudusttmp(ig) = taudusttmp(ig) + 
+     &                         aerosol(ig,l,iaerdust(iaer))
+            ENDDO
+          ENDDO
+        ENDDO
+
+c       Saved scaling factor
+        DO ig=1,ngrid
+            tauscaling(ig) = tauref(ig) * 
+     &                       pplev(ig,1) / odpref / taudusttmp(ig)
+c            tauscaling(ig) = 1.e-4
+        ENDDO
+
+      ENDIF
 
 c     Opacity computation
@@ -459,4 +468,14 @@
         ENDDO
       ENDDO
+
+      IF (freedust) THEN
+        ! tauref has been initialized to 0 before.
+        DO l=1,nlayer
+          DO ig=1,ngrid
+            tauref(ig) = tauref(ig) + 
+     &                aerosol(ig,l,iaerdust(iaer))
+          ENDDO
+        ENDDO
+      ENDIF
       
 c output for debug
Index: trunk/LMDZ.MARS/libf/phymars/callkeys.h
===================================================================
--- trunk/LMDZ.MARS/libf/phymars/callkeys.h	(revision 1087)
+++ trunk/LMDZ.MARS/libf/phymars/callkeys.h	(revision 1088)
@@ -11,6 +11,6 @@
      &   ,callmolvis,callmoldiff,thermochem,thermoswater,callemis       &
      &   ,callg2d,linear,rayleigh,tracer,active,doubleq,submicron       &
-     &   ,lifting,callddevil,scavenging,sedimentation,activice,water    &
-     &   ,tifeedback,microphys,caps,photochem,calltherm                 &
+     &   ,lifting,freedust,callddevil,scavenging,sedimentation          &
+     &   ,activice,water,tifeedback,microphys,caps,photochem,calltherm  &
      &   ,callrichsl,callslope,tituscap
      
@@ -53,4 +53,5 @@
       logical tracer
       integer dustbin
+      logical freedust 
       logical active,doubleq,submicron,lifting,callddevil,scavenging
       logical sedimentation
Index: trunk/LMDZ.MARS/libf/phymars/inifis.F
===================================================================
--- trunk/LMDZ.MARS/libf/phymars/inifis.F	(revision 1087)
+++ trunk/LMDZ.MARS/libf/phymars/inifis.F	(revision 1088)
@@ -401,4 +401,5 @@
            stop
          endif
+
 ! lifting
          write(*,*)"dust lifted by GCM surface winds ?"
@@ -414,4 +415,21 @@
            stop
          endif
+
+! free evolving dust
+! freedust=true just says that there is no lifting and no dust opacity scaling.
+         write(*,*)"dust lifted by GCM surface winds ?"
+         freedust=.false. ! default value
+         call getin("freedust",freedust)
+         write(*,*)" freedust = ",freedust
+         if (freedust.and..not.doubleq) then
+           print*,'freedust should be used with doubleq !'
+           stop
+         endif
+         if (freedust.and.lifting) then
+           print*,'if freedust is used, then lifting should not be used'
+           print*,'lifting forced to false !!'
+           lifting=.false.
+         endif
+
 ! callddevil
          write(*,*)" dust lifted by dust devils ?"
@@ -493,4 +511,9 @@
          call getin("microphys",microphys)
          write(*,*)" microphys = ",microphys
+         if (freedust.and.microphys) then
+           print*,'freedust can not be used with microphys !'
+           print*,'(although that could be improved...)'
+           stop
+         endif
 
 ! microphysical parameter contact       
