Index: LMDZ4/branches/LMDZ4V5.0-dev/libf/phylmd/traclmdz_mod.F90
===================================================================
--- LMDZ4/branches/LMDZ4V5.0-dev/libf/phylmd/traclmdz_mod.F90	(revision 1376)
+++ LMDZ4/branches/LMDZ4V5.0-dev/libf/phylmd/traclmdz_mod.F90	(revision 1379)
@@ -6,4 +6,6 @@
 ! only if running without any other chemestry model as INCA or REPROBUS.  
 !
+
+  IMPLICIT NONE
 
   REAL,DIMENSION(:,:),ALLOCATABLE,SAVE :: masktr   ! Masque reservoir de sol traceur
@@ -44,4 +46,9 @@
 !$OMP THREADPRIVATE(id_pcs0, id_pcos0, id_pcq0)
 
+  INTEGER, SAVE:: id_o3
+  !$OMP THREADPRIVATE(id_o3)
+  ! index of ozone tracer with Cariolle parameterization
+  ! 0 means no ozone tracer
+
   LOGICAL,SAVE :: rnpb=.TRUE. ! Presence du couple Rn222, Pb210
 !$OMP THREADPRIVATE(rnpb)
@@ -56,5 +63,4 @@
     USE dimphy
     USE infotrac
-    IMPLICIT NONE
     
     ! Input argument
@@ -78,7 +84,7 @@
     USE dimphy
     USE infotrac
+    USE regr_pr_comb_coefoz_m, ONLY: alloc_coefoz
+    USE press_coefoz_m, ONLY: press_coefoz
     USE carbon_cycle_mod, ONLY : carbon_cycle_init, carbon_cycle_tr, carbon_cycle_cpl
-
-    IMPLICIT NONE
 
     INCLUDE "indicesol.h"
@@ -135,7 +141,8 @@
     
 !
-! Recherche des traceurs connus : Be7, CO2,...
+! Recherche des traceurs connus : Be7, O3, CO2,...
 ! --------------------------------------------
     id_be=0
+    id_o3=0
     DO it=1,nbtr
        iiq=niadv(it+2)
@@ -149,4 +156,9 @@
           CALL init_be(pctsrf,masktr(:,id_be),tautr(id_be),vdeptr(id_be),scavtr(id_be),srcbe)
           WRITE(*,*) 'Initialisation srcBe: OK'
+       ELSE IF (tname(iiq)=="O3" .OR. tname(iiq)=="o3") THEN
+          ! Recherche de l'ozone : parametrization de la chimie par Cariolle
+          id_o3=it
+          CALL alloc_coefoz   ! allocate ozone coefficients
+          CALL press_coefoz   ! read input pressure levels
        END IF    
     END DO
@@ -311,17 +323,13 @@
   END SUBROUTINE traclmdz_init
 
-  SUBROUTINE traclmdz(                           &
-       nstep,    pdtphys,      t_seri,           &
-       paprs,    pplay,        cdragh,  coefh,   &
-       yu1,      yv1,          ftsol,   pctsrf,  &
-       xlat,     couchelimite, sh,               &
-       tr_seri,  source,       solsym,  d_tr_cl)
+  SUBROUTINE traclmdz(nstep, julien, gmtime, pdtphys, t_seri, paprs, pplay, &
+       cdragh,  coefh, yu1, yv1, ftsol, pctsrf, xlat, xlon, couchelimite, sh, &
+       tr_seri, source, solsym, d_tr_cl, zmasse)
     
     USE dimphy
     USE infotrac
+    USE regr_pr_comb_coefoz_m, ONLY: regr_pr_comb_coefoz
+    USE o3_chem_m, ONLY: o3_chem
     USE carbon_cycle_mod, ONLY : carbon_cycle, carbon_cycle_tr, carbon_cycle_cpl
-    
-    IMPLICIT NONE
-    
     INCLUDE "YOMCST.h"
     INCLUDE "indicesol.h"
@@ -335,6 +343,9 @@
 !Configuration grille,temps:
     INTEGER,INTENT(IN) :: nstep      ! nombre d'appels de la physiq
+    INTEGER,INTENT(IN) :: julien     ! Jour julien
+    REAL,INTENT(IN)    :: gmtime
     REAL,INTENT(IN)    :: pdtphys    ! Pas d'integration pour la physique (seconde)  
     REAL,DIMENSION(klon),INTENT(IN) :: xlat    ! latitudes pour chaque point 
+    REAL, INTENT(IN):: xlon(:) ! dim(klon) longitude
 
 !
@@ -344,4 +355,5 @@
     REAL,DIMENSION(klon,klev+1),INTENT(IN) :: paprs   ! pression pour chaque inter-couche (en Pa)
     REAL,DIMENSION(klon,klev),INTENT(IN)   :: pplay   ! pression pour le mileu de chaque couche (en Pa)
+    REAL,intent(in):: zmasse (:, :)   ! dim(klon,klev) density of air, in kg/m2
 
 
@@ -375,8 +387,7 @@
 
     INTEGER :: i, k, it
+    INTEGER lmt_pas ! number of time steps of "physics" per day
 
     REAL,DIMENSION(klon)           :: d_trs    ! Td dans le reservoir
-    REAL,DIMENSION(klon,klev)      :: delp     ! epaisseur de couche (Pa)
-    
     REAL,DIMENSION(klon,klev,nbtr) :: d_tr_dec ! Td radioactive
     REAL                           :: zrho      ! Masse Volumique de l'air KgA/m3
@@ -485,11 +496,4 @@
     END IF
     
-
-    DO k = 1, klev
-       DO i = 1, klon
-          delp(i,k) = paprs(i,k)-paprs(i,k+1)
-       END DO
-    END DO
-    
     DO it=1, nbtr
        IF (couchelimite .AND. pbl_flg(it) == 0 ) THEN ! couche limite avec quantite dans le sol calculee
@@ -497,5 +501,5 @@
                cdragh, coefh,t_seri,ftsol,pctsrf,  &
                tr_seri(:,:,it),trs(:,it),          &
-               paprs, pplay, delp,                 &
+               paprs, pplay, zmasse * rg, &
                masktr(:,it),fshtr(:,it),hsoltr(it),&
                tautr(it),vdeptr(it),               &
@@ -592,4 +596,18 @@
 
 !======================================================================
+!   Parameterization of ozone chemistry
+!======================================================================
+
+    IF (id_o3 /= 0) then
+       lmt_pas = NINT(86400./pdtphys)
+       IF (MOD(nstep - 1, lmt_pas) == 0) THEN
+          ! Once per day, update the coefficients for ozone chemistry:
+          CALL regr_pr_comb_coefoz(julien, xlat, paprs, pplay)
+       END IF
+       CALL o3_chem(julien, gmtime, t_seri, zmasse, pdtphys, xlat, &
+            xlon, tr_seri(:, :, id_o3))
+    END IF
+
+!======================================================================
 !   Calcul de cycle de carbon
 !======================================================================
@@ -607,6 +625,4 @@
     USE infotrac
     
-    IMPLICIT NONE
-    
     REAL,DIMENSION(klon,nbtr), INTENT(OUT) :: trs_out
     INTEGER :: ierr
