Index: /LMDZ6/trunk/DefLists/isotopes_params.def
===================================================================
--- /LMDZ6/trunk/DefLists/isotopes_params.def	(revision 4149)
+++ /LMDZ6/trunk/DefLists/isotopes_params.def	(revision 4149)
@@ -0,0 +1,8 @@
+&H2O
+  params                                               deltaO18_oce=0.0                fac_enrichoce18=0.0005               talph1_O18=1137.   talph2_O18=-0.4156  talph3_O18=-2.0667E-3  talps1_O18=11.839  talps2_O18=-0.028244  tkcin0_O18=0.006            tkcin1_O18=0.000285         tkcin2_O18=0.00082          tdifrel_O18=1./0.9723  alpha_liq_sol_O18=1.00291  fac_coeff_eq17_liq=0.529  fac_coeff_eq17_ice=0.529
+  H2[16]O  alpha=1.000  tnat=1.0000     toce=tnat                                      tcorr=1.0                            talph1=0.0         talph2=0.0          talph3=0.0             talps1=0.0         talps2=0.0            tkcin0=0.0                  tkcin1=0.0                  tkcin2=0.0                  tdifrel=1.0            alpha_liq_sol=1.0                                    Rdefault=tnat*1.0                               Rmethox=1.0
+  H2[17]O  alpha=1.003  tnat=40.000e-6  toce=tnat*(1.0+deltaO18_oce/1000.0)^pente_MWL  tcorr=1.0+fac_enrichoce18*pente_MWL  talph1=talph1_O18  talph2=talph2_O18   talph3=talph3_O18      talps1=talps1_O18  talps2=talps2_O18     tkcin0=tkcin0_O18*fac_kcin  tkcin1=tkcin1_O18*fac_kcin  tkcin2=tkcin2_O18*fac_kcin  tdifrel=1./0.98555     alpha_liq_sol=alpha_liq_sol_O18^fac_coeff_eq17_liq   Rdefault=tnat*(1.0-3.15/1000.)                  Rmethox=tnat*(1.0+230./1000.)  pente_MWL=0.528  fac_kcin=(tdifrel-1.0)/(tdifrel_O18-1.0)
+  H2[18]O  alpha=1.006  tnat=2005.2e-6  toce=tnat*(1.0+deltaO18_oce/1000.0)            tcorr=1.0+fac_enrichoce18            talph1=talph1_O18  talph2=talph2_O18   talph3=talph3_O18      talps1=talps1_O18  talps2=talps2_O18     tkcin0=tkcin0_O18           tkcin1=tkcin1_O18           tkcin2=tkcin2_O18           tdifrel=tdifrel_O18    alpha_liq_sol=alpha_liq_sol_O18                      Rdefault=tnat*(1.0-6.00/1000.)                  Rmethox=tnat*(1.0+130./1000.)  
+  H[2]HO   alpha=1.010  tnat=155.76e-6  toce=tnat*(1.0+deltaO18_oce/1000.0*pente_MWL)  tcorr=1.0+fac_enrichoce18*pente_MWL  talph1=24844.      talph2=-76.248      talph3=52.612E-3       talps1=16288.      talps2=-0.0934        tkcin0=tkcin0_O18*fac_kcin  tkcin1=tkcin1_O18*fac_kcin  tkcin2=tkcin2_O18*fac_kcin  tdifrel=1./0.9755      alpha_liq_sol=1.0212                                 Rdefault=tnat*(1.0+(10.0-6.0*pente_MWL)/1000.)  Rmethox=tnat*(1.0-25.0/1000.)  pente_MWL=8.0    fac_kcin=(tdifrel-1.0)/(tdifrel_O18-1.0)
+  H[3]HO   alpha=1.000  tnat=0.0000     toce=4.0E-19                                   tcorr=1.0                            talph1=46480.      talph2=-103.87      talph3=0.0             talps1=46480.      talps2=-103.87        tkcin0=0.01056              tkcin1=0.0005016            tkcin2=0.0014432            tdifrel=1./0.968       alpha_liq_sol=1.0                                    Rdefault=0.0                                    Rmethox=0.0
+
Index: /LMDZ6/trunk/libf/phylmdiso/isotopes_mod.F90
===================================================================
--- /LMDZ6/trunk/libf/phylmdiso/isotopes_mod.F90	(revision 4148)
+++ /LMDZ6/trunk/libf/phylmdiso/isotopes_mod.F90	(revision 4149)
@@ -3,5 +3,6 @@
 
 MODULE isotopes_mod
-   USE strings_mod, ONLY: msg, real2str, int2str, bool2str, maxlen, strIdx, strStack
+   USE strings_mod,  ONLY: msg, real2str, int2str, bool2str, maxlen, strIdx, strStack
+   USE infotrac_phy, ONLY: isoName
    IMPLICIT NONE
    INTERFACE get_in; MODULE PROCEDURE getinp_s, getinp_i, getinp_r, getinp_l;  END INTERFACE get_in
@@ -10,4 +11,6 @@
   !--- Contains all isotopic variables + their initialization
   !--- Isotopes-specific routines are in isotopes_routines_mod to avoid circular dependencies with isotopes_verif_mod.
+
+  LOGICAL, PARAMETER :: lOldCode=.TRUE.
 
    !--- Isotopes indices (in [1,niso] ; non-existing => 0 index)
@@ -105,6 +108,4 @@
                     alpha_liq_sol, Rdefault, Rmethox
 !$OMP THREADPRIVATE(alpha_liq_sol, Rdefault, Rmethox)
-character*3, ALLOCATABLE, DIMENSION(:), save :: striso
-!$OMP THREADPRIVATE(striso)
    REAL, SAVE ::    fac_coeff_eq17_liq, fac_coeff_eq17_ice
 !$OMP THREADPRIVATE(fac_coeff_eq17_liq, fac_coeff_eq17_ice)
@@ -136,5 +137,6 @@
 SUBROUTINE iso_init()
    USE ioipsl_getin_p_mod, ONLY: getin_p
-   USE infotrac_phy,       ONLY: ntiso, niso, isoName
+   USE infotrac_phy,       ONLY: ntiso, niso, getKey
+    USE strings_mod,       ONLY: maxlen
    IMPLICIT NONE
 
@@ -149,5 +151,4 @@
    !--- For H2[17]O
    REAL    :: fac_kcin, pente_MWL
-   INTEGER :: ierr
       
    !--- Sensitivity tests
@@ -160,4 +161,5 @@
 
    CHARACTER(LEN=maxlen) :: modname, sxt
+   REAL, ALLOCATABLE :: tmp(:)
 
    modname = 'iso_init'
@@ -165,9 +167,10 @@
 
    !--- Memory allocations
+   IF(lOldCode) THEN
    ALLOCATE(talph1(niso), tkcin0(niso),  talps1(niso),  tnat(niso))
    ALLOCATE(talph2(niso), tkcin1(niso),  talps2(niso),  toce(niso))
    ALLOCATE(talph3(niso), tkcin2(niso), tdifrel(niso), tcorr(niso))
    ALLOCATE(alpha_liq_sol(niso),   Rdefault(niso),   Rmethox(niso))
-   ALLOCATE(striso(niso))
+   END IF
 
 
@@ -184,8 +187,8 @@
 
    !--- Type of water isotopes:
-   iso_eau = strIdx(isoName, 'H2[16]O'); CALL msg('59: iso_eau='//int2str(iso_eau), modname)
-   iso_O17 = strIdx(isoName, 'H2[17]O'); CALL msg('iso_HDO='//int2str(iso_HDO), modname)
+   iso_eau = strIdx(isoName, 'H2[16]O'); CALL msg('iso_eau='//int2str(iso_eau), modname)
+   iso_HDO = strIdx(isoName, 'H[2]HO');  CALL msg('iso_HDO='//int2str(iso_HDO), modname)
    iso_O18 = strIdx(isoName, 'H2[18]O'); CALL msg('iso_O18='//int2str(iso_O18), modname)
-   iso_HDO = strIdx(isoName, 'H[2]HO');  CALL msg('iso_O17='//int2str(iso_O17), modname)
+   iso_O17 = strIdx(isoName, 'H2[17]O'); CALL msg('iso_O17='//int2str(iso_O17), modname)
    iso_HTO = strIdx(isoName, 'H[3]HO');  CALL msg('iso_HTO='//int2str(iso_HTO), modname)
 
@@ -229,6 +232,7 @@
       CALL get_in('lat_max_albedo', lat_max_albedo,  100.)
    END IF
+   IF(lOldCode) &
    CALL get_in('deltaO18_oce',        deltaO18_oce,   0.0)
-
+   deltaO18_oce=0.0
    CALL get_in('deltaP_BL',           deltaP_BL,     10.0)
    CALL get_in('ruissellement_pluie', ruissellement_pluie, 0)
@@ -298,7 +302,14 @@
     T_cste_surf_cond = 288.0
    
+   CALL msg('iso_O18, iso_HDO, iso_eau = '//TRIM(strStack(int2str([iso_O18, iso_HDO, iso_eau]))), modname)
+
    !--------------------------------------------------------------
    ! Parameters that depend on the nature of water isotopes:
    !--------------------------------------------------------------
+
+   !===========================================================================================================================
+   IF(lOldCode) THEN
+   !===========================================================================================================================
+
    ! Local constants
    fac_enrichoce18 = 0.0005            ! Then: tcorO18 = 1 + fac_enrichoce18
@@ -317,6 +328,4 @@
    fac_coeff_eq17_ice = 0.529
 
-   CALL msg('iso_O18, iso_HDO, iso_eau = '//TRIM(strStack(int2str([iso_O18, iso_HDO, iso_eau]))), modname)
-
    !--- Kinetic factor for surface evaporation:
    ! (cf: kcin = tkcin0                  if |V|<tv0cin
@@ -326,5 +335,5 @@
    DO ixt = 1, niso
       sxt=int2str(ixt)
-      WRITE(*,*) 'iso_init 80: ixt=',ixt
+      CALL msg('80: ixt='//TRIM(int2str(ixt)),modname)
 
       Rdefault(ixt) = 0.0
@@ -343,5 +352,4 @@
          alpha_liq_sol(ixt) = 1.
          Rmethox(ixt) = 0.0
-         striso (ixt) = 'HTO'
       ELSE IF(ixt == iso_O17) THEN     !=== H2[17]O
          tdifrel(ixt)=1./0.98555       ! Used in 1D and in LdG's model
@@ -361,5 +369,4 @@
          IF(Rdefault_smow) Rdefault(ixt) = tnat(ixt)*(-3.15/1000.0+1.0)
          Rmethox(ixt) = (230./1000.+1.)*tnat(ixt)     ! Zahn et al 2006
-         striso (ixt) = 'O17'
       ELSE IF(ixt == iso_O18) THEN     !=== H2[18]O
          tdifrel(ixt) = tdifrel_O18
@@ -375,6 +382,4 @@
          IF(Rdefault_smow) Rdefault(ixt) = tnat(ixt)*(-6.0/1000.0+1.0)
          Rmethox(ixt) = (130./1000.+1.)*tnat(ixt) ! Zahn et al 2006   
-         striso (ixt) = 'O18'
-         CALL msg('519: ixt, striso(ixt) = '//TRIM(sxt)//', '//TRIM(striso(ixt)), modname)
       ELSE IF(ixt == iso_HDO) THEN     !=== H[2]HO
          tdifrel(ixt) = 1./0.9755
@@ -395,6 +400,4 @@
          IF(Rdefault_smow) Rdefault(ixt) = tnat(ixt)*((-6.0*pente_MWL+10.0)/1000.0+1.0)
          Rmethox(ixt) = tnat(ixt)*(-25.0/1000.+1.) ! Zahn et al 2006
-         striso (ixt) = 'HDO'
-         CALL msg('548: ixt,striso(ixt) = '//TRIM(sxt)//', '//striso(ixt), modname)
       ELSE IF(ixt  == iso_eau) THEN    !=== H2O[16]
          tkcin0(ixt) = 0.0
@@ -406,11 +409,41 @@
          tdifrel(ixt) = 1.
          talph1(ixt) = 0. ; talph2(ixt) = 0. ; talph3(ixt) = 0.
-         talps1(ixt) = 0. ; talph3(ixt) = 0.
+         talps1(ixt) = 0. ; talps2(ixt) = 0.
          alpha_liq_sol(ixt)=1.
          IF(Rdefault_smow) Rdefault(ixt) = tnat(ixt)*1.0
          Rmethox(ixt) = 1.0
-         striso(ixt) = 'eau'
       END IF
    END DO
+   !===========================================================================================================================
+   ELSE
+   !===========================================================================================================================
+
+   IF(getKey('tnat',    tnat,    isoName)) CALL abort_physic(modname, 'can''t get tnat',    1)
+   IF(getKey('toce',    toce,    isoName)) CALL abort_physic(modname, 'can''t get toce',    1)
+   IF(getKey('tcorr',   tcorr,   isoName)) CALL abort_physic(modname, 'can''t get tcorr',   1)
+   IF(getKey('talph1',  talph1,  isoName)) CALL abort_physic(modname, 'can''t get talph1',  1)
+   IF(getKey('talph2',  talph2,  isoName)) CALL abort_physic(modname, 'can''t get talph2',  1)
+   IF(getKey('talph3',  talph3,  isoName)) CALL abort_physic(modname, 'can''t get talph3',  1)
+   IF(getKey('talps1',  talps1,  isoName)) CALL abort_physic(modname, 'can''t get talps1',  1)
+   IF(getKey('talps2',  talps2,  isoName)) CALL abort_physic(modname, 'can''t get talps2',  1)
+   IF(getKey('tkcin0',  tkcin0,  isoName)) CALL abort_physic(modname, 'can''t get tkcin0',  1)
+   IF(getKey('tkcin1',  tkcin1,  isoName)) CALL abort_physic(modname, 'can''t get tkcin1',  1)
+   IF(getKey('tkcin2',  tkcin2,  isoName)) CALL abort_physic(modname, 'can''t get tkcin2',  1)
+   IF(getKey('tdifrel', tdifrel, isoName)) CALL abort_physic(modname, 'can''t get tdifrel', 1)
+   DO ixt = 1, niso
+      IF     (ixt == iso_HTO) THEN; tdifrel(ixt) = 1./0.968
+      ELSE IF(ixt == iso_HDO) THEN; tdifrel(ixt) = 1./0.9755
+      ELSE IF(ixt == iso_O17) THEN; tdifrel(ixt) = 1./0.98555
+      ELSE IF(ixt == iso_O18) THEN; tdifrel(ixt) = 1./0.9723
+      ELSE IF(ixt == iso_eau) THEN; tdifrel(ixt) = 1.; END IF
+   END DO
+   IF(getKey('alpha_liq_sol', alpha_liq_sol, isoName)) CALL abort_physic(modname, 'can''t get alpha_liq_sol',  1)
+   IF(getKey('Rdefault',Rdefault,isoName)) CALL abort_physic(modname, 'can''t get Rdefault',1)
+   IF(getKey('Rmethox', Rmethox, isoName)) CALL abort_physic(modname, 'can''t get Rmethox', 1)
+   IF(.NOT.Rdefault_smow) Rdefault(:) = 0.0
+
+   !===========================================================================================================================
+   END IF
+   !===========================================================================================================================
 
    !--- Sensitivity test: no kinetic effect in sfc evaporation
@@ -423,9 +456,10 @@
    CALL msg('285: verif initialisation:', modname)
    DO ixt=1,niso
-      CALL msg(' * striso('//TRIM(sxt)//') = <'//TRIM(striso(ixt))//'>',   modname)
-      CALL msg(  '   tnat('//TRIM(sxt)//') = '//TRIM(real2str(tnat(ixt))), modname)
-!     CALL msg('   alpha_liq_sol('//TRIM(sxt)//') = '//TRIM(real2str(alpha_liq_sol(ixt))), modname)
-!     CALL msg(       '   tkcin0('//TRIM(sxt)//') = '//TRIM(real2str(tkcin0(ixt))),        modname)
-!     CALL msg(      '   tdifrel('//TRIM(sxt)//') = '//TRIM(real2str(tdifrel(ixt))),       modname)
+      sxt=int2str(ixt)
+      CALL msg(' * isoName('//TRIM(sxt)//') = <'//TRIM(isoName(ixt))//'>',  modname)
+      CALL msg(  '    tnat('//TRIM(sxt)//') = '//TRIM(real2str(tnat(ixt))), modname)
+!     CALL msg('    alpha_liq_sol('//TRIM(sxt)//') = '//TRIM(real2str(alpha_liq_sol(ixt))), modname)
+!     CALL msg(        '   tkcin0('//TRIM(sxt)//') = '//TRIM(real2str(tkcin0(ixt))),        modname)
+!     CALL msg(       '   tdifrel('//TRIM(sxt)//') = '//TRIM(real2str(tdifrel(ixt))),       modname)
    END DO
    CALL msg('69:     lambda = '//TRIM(real2str(lambda_sursat)), modname)
Index: /LMDZ6/trunk/libf/phylmdiso/isotopes_routines_mod.F90
===================================================================
--- /LMDZ6/trunk/libf/phylmdiso/isotopes_routines_mod.F90	(revision 4148)
+++ /LMDZ6/trunk/libf/phylmdiso/isotopes_routines_mod.F90	(revision 4149)
@@ -16525,5 +16525,5 @@
       !USE write_field_phy
       USE indice_sol_mod, only: nbsrf  
-  USE isotopes_mod, ONLY: striso,iso_HDO,iso_eau
+  USE isotopes_mod, ONLY: isoName,iso_HDO,iso_eau
 #ifdef ISOVERIF
   USE isotopes_verif_mod
@@ -16563,5 +16563,5 @@
         CHARACTER*5 str5
         real xmin,xmax    
-        CHARACTER*50 striso_sortie  
+        CHARACTER*50 outiso  
         integer lnblnk
         LOGICAL :: found,phyetat0_get,phyetat0_srf
@@ -16581,21 +16581,12 @@
    write(*,*) 'phyiso_etat0_fichier 3'
    write(*,*) 'niso=',niso
-   write(*,*) 'striso(1)=',striso(1)
+   write(*,*) 'isoName(1)='//TRIM(isoName(1))
 
    do ixt=1,ntraciso
 
-     if (ixt.le.niso) then
-        striso_sortie=striso(ixt)
-     else
-#ifdef ISOTRAC
-        iiso=index_iso(ixt)
-        izone=index_zone(ixt)       
-        striso_sortie=striso(iiso)//strtrac(izone)
-#else
-        write(*,*) 'phyredem 546: ixt,ntraciso=', ixt,ntraciso
-        stop
-#endif
-     endif !if (ixt.le.niso) then
-     write(*,*) 'phyiso_etat0_fichier 16621: ixt,striso_sortie=',ixt,striso_sortie(1:lnblnk(striso_sortie))
+      outiso=TRIM(isoName(ixt))
+      i = INDEX(outiso, '_', .TRUE.)
+      outiso = outiso(1:i-1)//outiso(i+1:LEN_TRIM(outiso))
+      write(*,*) 'phyiso_etat0_fichier 16621: ixt,outiso=',ixt,TRIM(outiso)
 
            
@@ -16606,44 +16597,31 @@
 #endif
 
-      found=phyetat0_srf(1,iso_tmp_lonsrf,"XTSNOW"//striso_sortie(1:lnblnk(striso_sortie)), &
-     &     "Surface snow",0.)
-      if (.NOT.found) then
-        CALL abort_physic('isotopes_routines_mod', &
-                'phyiso_etat0_fichier 16581: variable isotopique not found',1)
-      endif
+      found=phyetat0_srf(1,iso_tmp_lonsrf,"XTSNOW"//TRIM(outiso),"Surface snow",0.)
+      if (.NOT.found) CALL abort_physic('isotopes_routines_mod', &
+                            'phyiso_etat0_fichier 16581: variable isotopique not found',1)
       xtsnow(ixt,:,:)=iso_tmp_lonsrf(:,:)
       
-      found=phyetat0_srf(1,iso_tmp_lonsrf,"XTEVAP"//striso_sortie &
-     &   (1:lnblnk(striso_sortie)),"evaporation",0.)
+      found=phyetat0_srf(1,iso_tmp_lonsrf,"XTEVAP"//TRIM(outiso),"evaporation",0.)
       fxtevap(ixt,:,:)=iso_tmp_lonsrf(:,:)
 
-      found=phyetat0_get(1,iso_tmp,"xtrain_f"//striso_sortie &
-     &   (1:lnblnk(striso_sortie)),"xrain fall",0.)
+      found=phyetat0_get(1,iso_tmp,"xtrain_f"//TRIM(outiso),"xrain fall",0.)
       xtrain_fall(ixt,:)=iso_tmp(:)
 
-      found=phyetat0_get(1,iso_tmp,"xtsnow_f"//striso_sortie &
-     &   (1:lnblnk(striso_sortie)),"snow fall",0.)
+      found=phyetat0_get(1,iso_tmp,"xtsnow_f"//TRIM(outiso),"snow fall",0.)
       xtsnow_fall(ixt,:)=iso_tmp(:)
 
-      found=phyetat0_get(klev,iso_tmp_lonlev,"XTANCIEN"//striso_sortie &
-     &       (1:lnblnk(striso_sortie)),"QANCIEN",0.)
+      found=phyetat0_get(klev,iso_tmp_lonlev,"XTANCIEN"//TRIM(outiso),"QANCIEN",0.)
       xt_ancien(ixt,:,:)=iso_tmp_lonlev(:,:)
 
-      found=phyetat0_get(klev,iso_tmp_lonlev,"XTLANCIEN"//striso_sortie &
-     &       (1:lnblnk(striso_sortie)),"QLANCIEN",0.)
+      found=phyetat0_get(klev,iso_tmp_lonlev,"XTLANCIEN"//TRIM(outiso),"QLANCIEN",0.)
       xtl_ancien(ixt,:,:)=iso_tmp_lonlev(:,:)
 
-      found=phyetat0_get(klev,iso_tmp_lonlev,"XTSANCIEN"//striso_sortie &
-     &       (1:lnblnk(striso_sortie)),"QSANCIEN",0.)
+      found=phyetat0_get(klev,iso_tmp_lonlev,"XTSANCIEN"//TRIM(outiso),"QSANCIEN",0.)
       xts_ancien(ixt,:,:)=iso_tmp_lonlev(:,:)
 
-
-      found=phyetat0_get(1,iso_tmp,"XTRUNOFFLIC0"//striso_sortie(1:lnblnk(striso_sortie)), &
-     &          "RUNOFFLIC0",0.)  
+      found=phyetat0_get(1,iso_tmp,"XTRUNOFFLIC0"//TRIM(outiso),"RUNOFFLIC0",0.)  
       xtrun_off_lic_0(ixt,:)=iso_tmp(:)
 
-
-      found=phyetat0_get(klev,iso_tmp_lonlev,"WAKE_DELTAXT"//striso_sortie &
-     &   (1:lnblnk(striso_sortie)),"Delta hum. wake/env",0.)  
+      found=phyetat0_get(klev,iso_tmp_lonlev,"WAKE_DELTAXT"//TRIM(outiso),"Delta hum. wake/env",0.)  
       wake_deltaxt(ixt,:,:)=iso_tmp_lonlev(:,:)
 
@@ -16687,10 +16665,8 @@
        ! ces variables n'ont pas de traceurs:
        if (ixt.le.niso) then
-        found=phyetat0_get(1,iso_tmp,"XTSOL"//striso_sortie(1:lnblnk(striso_sortie)), &
-     &     "Surface hmidity / bucket",0.)  
+        found=phyetat0_get(1,iso_tmp,"XTSOL"//TRIM(outiso),"Surface hmidity / bucket",0.)  
         xtsol(ixt,:)=iso_tmp(:)
 
-        found=phyetat0_get(1,iso_tmp,"Rland_ice"//striso_sortie &
-     &     (1:lnblnk(striso_sortie)),"R land ice",0.)
+        found=phyetat0_get(1,iso_tmp,"Rland_ice"//TRIM(outiso),"R land ice",0.)
         Rland_ice(ixt,:)=iso_tmp(:)
 
Index: /LMDZ6/trunk/libf/phylmdiso/isotopes_verif_mod.F90
===================================================================
--- /LMDZ6/trunk/libf/phylmdiso/isotopes_verif_mod.F90	(revision 4148)
+++ /LMDZ6/trunk/libf/phylmdiso/isotopes_verif_mod.F90	(revision 4149)
@@ -1939,6 +1939,5 @@
 
         function iso_verif_tracpos_choix_nostop(x,err_msg,seuil)
-        use isotrac_mod, only: index_iso,strtrac,index_zone
-        use isotopes_mod, only: striso
+        use isotopes_mod, only: isoName
         implicit none
 
@@ -1959,8 +1958,6 @@
 
        do ixt=niso+1,ntraciso
-          iiso=index_iso(ixt)
           if (iso_verif_positif_choix_nostop(x(ixt),seuil,err_msg// &
-     &           ', verif positif, iso'//striso(iiso) &
-     &           //strtrac(index_zone(ixt))).eq.1) then
+     &           ', verif positif, iso'//TRIM(isoName(ixt))).eq.1) then
             iso_verif_tracpos_choix_nostop=1
           endif
@@ -1971,6 +1968,5 @@
 
         function iso_verif_traceur_noNaN_nostop(x,err_msg)
-        use isotrac_mod, only: index_iso
-        use isotopes_mod, only: striso
+        use isotopes_mod, only: isoName
         implicit none
 
@@ -1991,8 +1987,7 @@
 
         do ixt=niso+1,ntraciso
-          iiso=index_iso(ixt)
 !          write(*,*) 'iso_verif_traceurs 154: iiso,ixt=',iiso,ixt
           if (iso_verif_noNaN_nostop(x(ixt),err_msg// &
-     &           ', verif trac no NaN, iso'//striso(iiso)) &
+     &           ', verif trac no NaN, iso'//TRIM(isoName(ixt))) &
      &           .eq.1) then
             iso_verif_traceur_noNaN_nostop=1
@@ -2005,5 +2000,5 @@
      &           errmaxin,errmaxrelin)
 
-        use isotopes_mod, ONLY: ridicule,striso
+        use isotopes_mod, ONLY: ridicule,isoName
         ! on vérifie juste bilan de masse
         implicit none
@@ -2033,5 +2028,6 @@
 
           if (iso_verif_egalite_choix_nostop(xtractot,x(iiso), &
-     &        err_msg//', verif trac egalite, iso '//striso(iiso), &
+     &        err_msg//', verif trac egalite, iso '// &
+     &        TRIM(isoName(iiso)), &
      &        errmaxin,errmaxrelin).eq.1) then
             write(*,*) 'iso_verif_traceur 202: x=',x
@@ -2044,5 +2040,5 @@
      &           (abs(x(iiso)).gt.ridicule)) then
             write(*,*) err_msg,', verif masse traceurs, iso ', &
-     &          striso(iiso)
+     &          TRIM(isoName(iiso))
             write(*,*) 'iso_verif_traceur 209: x=',x
 !            iso_verif_tracm_choix_nostop=1
@@ -2371,5 +2367,5 @@
         subroutine iso_verif_trac_masse_vect(x,n,m,err_msg, &
      &            errmax,errmaxrel)
-        use isotopes_mod, only: striso
+        use isotopes_mod, only: isoName
         implicit none
        
@@ -2402,5 +2398,6 @@
         call iso_verif_egalite_std_vect( &
      &           xtractot,xiiso, &
-     &           err_msg//', verif trac egalite, iso '//striso(iiso), &
+     &           err_msg//', verif trac egalite, iso ' &
+     &           //TRIM(isoName(iiso)), &
      &           n,m,errmax,errmaxrel)
         enddo !do iiso=1,niso
Index: /LMDZ6/trunk/libf/phylmdiso/phyredem.F90
===================================================================
--- /LMDZ6/trunk/libf/phylmdiso/phyredem.F90	(revision 4148)
+++ /LMDZ6/trunk/libf/phylmdiso/phyredem.F90	(revision 4149)
@@ -489,5 +489,5 @@
       USE indice_sol_mod, ONLY: nbsrf
       USE iostart, ONLY: put_field
-      USE isotopes_mod, ONLY: striso,iso_eau
+      USE isotopes_mod, ONLY: isoName,iso_eau
 #ifdef ISOVERIF
       USE isotopes_verif_mod
@@ -568,16 +568,7 @@
    do ixt=1,ntiso
 
-     if (ixt.le.niso) then
-        outiso=striso(ixt)
-     else
-#ifdef ISOTRAC
-        iiso=index_iso(ixt)
-        izone=index_zone(ixt)       
-        outiso=striso(iiso)//strtrac(izone)
-#else
-        write(*,*) 'phyredem 546: ixt,ntiso=', ixt,ntiso
-        stop
-#endif
-     endif !if (ixt.le.niso) then
+      outiso = TRIM(isoName(ixt))
+      i = INDEX(outiso, '_', .TRUE.)
+      outiso = outiso(1:i-1)//outiso(i+1:LEN_TRIM(outiso))
       write(*,*) 'phyredem 550: ixt,outiso=',ixt,TRIM(outiso)
       
Index: /LMDZ6/trunk/libf/phylmdiso/phys_output_mod.F90
===================================================================
--- /LMDZ6/trunk/libf/phylmdiso/phys_output_mod.F90	(revision 4148)
+++ /LMDZ6/trunk/libf/phylmdiso/phys_output_mod.F90	(revision 4149)
@@ -52,5 +52,5 @@
 #endif
 #ifdef ISO
-    USE isotopes_mod, ONLY: striso,iso_HTO
+    USE isotopes_mod, ONLY: isoName,iso_HTO
 #ifdef ISOTRAC
     use isotrac_mod, only: index_zone,index_iso,strtrac
@@ -122,5 +122,5 @@
 
 #ifdef ISO
-    CHARACTER(LEN=LEN(striso)) :: outiso
+    CHARACTER(LEN=maxlen) :: outiso
     CHARACTER(LEN=20) :: unit
 #endif
@@ -546,16 +546,7 @@
     write(*,*) 'phys_output_mid 589'
     do ixt=1,ntraciso
-      if (ixt <= niso) then
-        outiso=striso(ixt)
-      else
-#ifdef ISOTRAC
-        iiso=index_iso(ixt)
-        izone=index_zone(ixt)       
-        outiso=striso(iiso)//strtrac(izone)
-#else
-        write(*,*) 'phys_output_mod 546: ixt,ntraciso=', ixt,ntraciso
-        stop
-#endif
-      endif
+      outiso = TRIM(isoName(ixt))
+      i = INDEX(outiso, '_', .TRUE.)
+      outiso = outiso(1:i-1)//outiso(i+1:LEN_TRIM(outiso))
 
       flag = [1,  1,  1, 10,  5, 10, 11, 11, 11, 11]; unit = 'kg/(s*m2)'
