Index: /branches/TAM_V3_0/NEMO/OPA_SRC/DTA/dtasal.F90
===================================================================
--- /branches/TAM_V3_0/NEMO/OPA_SRC/DTA/dtasal.F90	(revision 1883)
+++ /branches/TAM_V3_0/NEMO/OPA_SRC/DTA/dtasal.F90	(revision 1884)
@@ -34,5 +34,10 @@
    INTEGER ::   &
       numsdt,           &  !: logical unit for data salinity
+#if defined key_pomme_r025
+      nsal1, nsal2 ,     & ! first and second record used
+      nlecsa = 0           ! flag for first read
+#else
       nsal1, nsal2         ! first and second record used
+#endif
    REAL(wp), DIMENSION(jpi,jpj,jpk,2) ::   &
       saldta    ! salinity data at two consecutive times
@@ -89,4 +94,6 @@
      REAL(wp)  :: zfac
 #endif
+      CHARACTER (len=38) ::   &
+         cl_sdata = 'data_1m_salinity_nomask '
      REAL(wp), DIMENSION(jpk,2) ::   &
           zsaldta            ! auxiliary array for interpolation
@@ -96,5 +103,11 @@
      ! -----------------
      
-     iman  = INT( raamo )
+#if defined key_pomme_r025
+! DRAKKAR : we use input file with 1 month only
+      iman = 1
+#else
+      iman  = INT( raamo )
+#endif
+
 !!! better but change the results     i15 = INT( 2*FLOAT( nday ) / ( FLOAT( nobis(nmonth) ) + 0.5 ) )
      i15   = nday / 16
@@ -109,6 +122,6 @@
         nsal1 = 0   ! initializations
         IF(lwp) WRITE(numout,*) ' dta_sal : monthly salinity data in NetCDF file'
-        CALL iom_open ( 'data_1m_salinity_nomask', numsdt ) 
-        
+        CALL iom_open ( cl_sdata, numsdt ) 
+
      ENDIF
      
@@ -117,5 +130,12 @@
      ! -------------------
      
+#if defined key_pomme_r025
+!    IF( kt == nit000 .OR. imois /= nsal1 ) THEN
+! In standard ORCA025, no damping is done. We read Levitus only for initial condition
+     IF( kt == nit000 .AND. nlecsa == 0 ) THEN
+        nlecsa =  1
+#else
      IF( kt == nit000 .OR. imois /= nsal1 ) THEN
+#endif
         
         ! 2.1 Calendar computation
@@ -318,5 +338,7 @@
            CALL prihre(saldta(:,:,jpkm1,1),jpi,jpj,1,jpi,20,1,jpj,20,1.,numout)
         ENDIF
+#if ! defined key_pomme_r025
      ENDIF
+#endif
      
      
@@ -326,4 +348,8 @@
      zxy = FLOAT(nday + 15 - 30*i15)/30.
      s_dta(:,:,:) = ( 1.- zxy ) * saldta(:,:,:,1) + zxy * saldta(:,:,:,2)
+
+#if defined key_pomme_r025
+     ENDIF
+#endif
      
      ! Close the file
Index: /branches/TAM_V3_0/NEMO/OPA_SRC/DTA/dtatem.F90
===================================================================
--- /branches/TAM_V3_0/NEMO/OPA_SRC/DTA/dtatem.F90	(revision 1883)
+++ /branches/TAM_V3_0/NEMO/OPA_SRC/DTA/dtatem.F90	(revision 1884)
@@ -33,5 +33,10 @@
    INTEGER ::   &
       numtdt,        &  !: logical unit for data temperature
+#if defined key_pomme_r025
+      ntem1, ntem2 , &  ! first and second record used
+      nlecte = 0        ! switch for frist read
+#else
       ntem1, ntem2  ! first and second record used
+#endif
    REAL(wp), DIMENSION(jpi,jpj,jpk,2) ::   &
       temdta            ! temperature data at two consecutive times
@@ -94,4 +99,6 @@
       REAL(wp)  :: zfac
 #endif
+      CHARACTER (len=38) ::   &
+         cl_tdata = 'data_1m_potential_temperature_nomask '
       REAL(wp), DIMENSION(jpk,2) ::   &
          ztemdta            ! auxiliary array for interpolation
@@ -101,5 +108,10 @@
       ! -----------------
       
+#if defined key_pomme_r025
+! DRAKKAR : we use input file with 1 month only
+      iman = 1
+#else
       iman  = INT( raamo )
+#endif
 !!! better but change the results     i15 = INT( 2*FLOAT( nday ) / ( FLOAT( nobis(nmonth) ) + 0.5 ) )
       i15   = nday / 16
@@ -114,5 +126,5 @@
          ntem1= 0   ! initializations
          IF(lwp) WRITE(numout,*) ' dta_tem : Levitus monthly fields'
-         CALL iom_open ( 'data_1m_potential_temperature_nomask', numtdt ) 
+         CALL iom_open ( cl_tdata, numtdt ) 
          
       ENDIF
@@ -122,5 +134,12 @@
       ! -------------------
       
+#if defined key_pomme_r025
+! DRAKKAR read only first step
+!     IF( kt == nit000 .OR. imois /= ntem1 ) THEN
+      IF( kt == nit000 .AND. nlecte == 0 ) THEN
+         nlecte = 1
+#else
       IF( kt == nit000 .OR. imois /= ntem1 ) THEN
+#endif
          
          ! Calendar computation
@@ -314,5 +333,7 @@
             CALL prihre( temdta(:,:,jpkm1,1), jpi, jpj, 1, jpi, 20, 1, jpj, 20, 1., numout )
          ENDIF
+#if ! defined key_pomme_r025
       ENDIF
+#endif
       
       
@@ -322,5 +343,9 @@
       zxy = FLOAT( nday + 15 - 30 * i15 ) / 30.
       t_dta(:,:,:) = (1.-zxy) * temdta(:,:,:,1) + zxy * temdta(:,:,:,2)
-      
+
+#if defined key_pomme_r025
+      ENDIF
+#endif
+
       ! Close the file
       ! --------------
Index: /branches/TAM_V3_0/NEMO/OPA_SRC/DYN/dynadv.F90
===================================================================
--- /branches/TAM_V3_0/NEMO/OPA_SRC/DYN/dynadv.F90	(revision 1883)
+++ /branches/TAM_V3_0/NEMO/OPA_SRC/DYN/dynadv.F90	(revision 1884)
@@ -23,4 +23,5 @@
 
    PUBLIC dyn_adv     ! routine called by step module
+   PUBLIC dyn_adv_ctl ! routine called by dyn_adv_tam module
  
    LOGICAL, PUBLIC ::   ln_dynadv_vec  = .TRUE.    ! vector form flag
Index: /branches/TAM_V3_0/NEMO/OPA_SRC/DYN/dynspg.F90
===================================================================
--- /branches/TAM_V3_0/NEMO/OPA_SRC/DYN/dynspg.F90	(revision 1883)
+++ /branches/TAM_V3_0/NEMO/OPA_SRC/DYN/dynspg.F90	(revision 1884)
@@ -70,14 +70,14 @@
       CASE (  2 )   ;   CALL dyn_spg_flt    ( kt, kindic )      ! filtered
       CASE (  3 )   ;   CALL dyn_spg_rl     ( kt, kindic )      ! rigid lid
-      !                                                    
+      !
       CASE ( -1 )                                       ! esopa: test all possibility with control print
-         ;              CALL dyn_spg_exp    ( kt )
-         ;              CALL prt_ctl( tab3d_1=ua, clinfo1=' spg0 - Ua: ', mask1=umask, &
+                        CALL dyn_spg_exp    ( kt )
+                        CALL prt_ctl( tab3d_1=ua, clinfo1=' spg0 - Ua: ', mask1=umask, &
             &                         tab3d_2=va, clinfo2=       ' Va: ', mask2=vmask, clinfo3='dyn' )
-         ;              CALL dyn_spg_ts     ( kt )
-         ;              CALL prt_ctl( tab3d_1=ua, clinfo1=' spg1 - Ua: ', mask1=umask, &
+                        CALL dyn_spg_ts     ( kt )
+                        CALL prt_ctl( tab3d_1=ua, clinfo1=' spg1 - Ua: ', mask1=umask, &
             &                         tab3d_2=va, clinfo2=       ' Va: ', mask2=vmask, clinfo3='dyn' )
-         ;              CALL dyn_spg_flt  ( kt, kindic )
-         ;              CALL prt_ctl( tab3d_1=ua, clinfo1=' spg2 - Ua: ', mask1=umask, &
+                        CALL dyn_spg_flt  ( kt, kindic )
+                        CALL prt_ctl( tab3d_1=ua, clinfo1=' spg2 - Ua: ', mask1=umask, &
             &                         tab3d_2=va, clinfo2=       ' Va: ', mask2=vmask, clinfo3='dyn' )
       END SELECT
Index: /branches/TAM_V3_0/NEMO/OPA_SRC/DYN/dynspg_flt.F90
===================================================================
--- /branches/TAM_V3_0/NEMO/OPA_SRC/DYN/dynspg_flt.F90	(revision 1883)
+++ /branches/TAM_V3_0/NEMO/OPA_SRC/DYN/dynspg_flt.F90	(revision 1884)
@@ -252,5 +252,9 @@
 #if defined key_obc
       CALL obc_dyn( kt )      ! Update velocities on each open boundary with the radiation algorithm
-      CALL obc_vol( kt )      ! Correction of the barotropic componant velocity to control the volume of the system
+#  if defined key_pomme_r025
+      IF( nbit_cmp == 0 )  CALL obc_vol( kt )  ! Correction of the barotropic componant velocity to control the volume of the system
+#  else
+      CALL obc_vol( kt )  ! Correction of the barotropic componant velocity to control the volume of the system
+#  endif
 #endif
 #if defined key_bdy
Index: /branches/TAM_V3_0/NEMO/OPA_SRC/OBC/obc_oce.F90
===================================================================
--- /branches/TAM_V3_0/NEMO/OPA_SRC/OBC/obc_oce.F90	(revision 1883)
+++ /branches/TAM_V3_0/NEMO/OPA_SRC/OBC/obc_oce.F90	(revision 1884)
@@ -60,6 +60,21 @@
       !                       !  scale are set to 0 in the namelist, for both inflow and outflow).
 
+#if defined key_pomme_r025
+   ! Logical for restarting with radiative OBCs, but without an OBC restart restart.obc.output file.
+   ! During the first 30 time steps, used FIXED boundary conditions.
+   ! We modify : obcini, obctra, obcdyn
+   LOGICAL :: ln_obc_rstart = .FALSE. !: radiative OBCs, but do not read restart.obc.output
+
    REAL(wp), PUBLIC ::    &  !:
-      obcsurftot       !: Total lateral surface of open boundaries
+!     Add computation of E/W/N/S lateral surface of open boundaries
+      obcsurftot      ,   &  !: Total lateral surface of open boundaries
+      obcsurfeast     ,   &  !: East  lateral surface of open boundaries
+      obcsurfwest     ,   &  !: West  lateral surface of open boundaries
+      obcsurfnorth    ,   &  !: North lateral surface of open boundaries
+      obcsurfsouth           !: South lateral surface of open boundaries
+#endif
+
+!   REAL(wp), PUBLIC ::    &  !:
+!      obcsurftot       !: Total lateral surface of open boundaries
    
    REAL(wp), PUBLIC, DIMENSION(jpi,jpj) :: &  !:
Index: /branches/TAM_V3_0/NEMO/OPA_SRC/OBC/obc_par.F90
===================================================================
--- /branches/TAM_V3_0/NEMO/OPA_SRC/OBC/obc_par.F90	(revision 1883)
+++ /branches/TAM_V3_0/NEMO/OPA_SRC/OBC/obc_par.F90	(revision 1884)
@@ -32,4 +32,10 @@
    !!----------------------------------------------------------------------
 #    include "obc_par_EEL_R5.h90"
+ 
+# elif defined key_pomme_r025 
+   !!---------------------------------------------------------------------- 
+   !!   'key_pomme_r025' :                         POMME R025 configuration 
+   !!---------------------------------------------------------------------- 
+#    include "obc_par_POMME_R025.h90" 
 
 # else
Index: /branches/TAM_V3_0/NEMO/OPA_SRC/OBC/obcdta.F90
===================================================================
--- /branches/TAM_V3_0/NEMO/OPA_SRC/OBC/obcdta.F90	(revision 1883)
+++ /branches/TAM_V3_0/NEMO/OPA_SRC/OBC/obcdta.F90	(revision 1884)
@@ -63,4 +63,6 @@
   LOGICAL, DIMENSION (jpi,jpk ) :: ltnmsk=.TRUE., lunmsk=.TRUE., lvnmsk=.TRUE.  ! checks
   LOGICAL, DIMENSION (jpi,jpk ) :: ltsmsk=.TRUE., lusmsk=.TRUE., lvsmsk=.TRUE.
+
+  LOGICAL :: ln_obc_tangential=.FALSE.
 
   !! * Substitutions
@@ -829,4 +831,10 @@
           IF( imois == 0 )   imois = iman
           itimo = imois
+#if defined key_pomme_r025
+       ELSE IF ( ntobc == 14 )   THEN
+          i15   = nday / 16
+          imois = nmonth + i15 - 1
+          itimo = imois + 1 ! shift
+#endif
        ELSE
           IF(lwp) WRITE(numout,*) 'data other than constant or monthly',kt
@@ -1191,8 +1199,11 @@
           CALL iom_close ( id_e )
           !
-          CALL iom_open ( cl_obc_eV , id_e )
-          CALL iom_get ( id_e, jpdom_unknown, 'vomecrty', vedta(nje0:nje1,:,nt_x), &
-               &               ktime=ntobc_x , kstart=istart, kcount= icount )
-          CALL iom_close ( id_e )
+
+          IF ( ln_obc_tangential ) THEN
+             CALL iom_open ( cl_obc_eV , id_e )
+             CALL iom_get ( id_e, jpdom_unknown, 'vomecrty', vedta(nje0:nje1,:,nt_x), &
+                  &              ktime=ntobc_x , kstart=istart, kcount= icount )
+             CALL iom_close ( id_e )
+          ENDIF
 
           ! mask the boundary values
@@ -1261,8 +1272,10 @@
           CALL iom_close ( id_w )
           !
-          CALL iom_open ( cl_obc_wV , id_w )
-          CALL iom_get ( id_w, jpdom_unknown, 'vomecrty', vwdta(njw0:njw1,:,nt_x), &
-               &               ktime=ntobc_x , kstart=istart, kcount= icount )
-          CALL iom_close ( id_w )
+          IF ( ln_obc_tangential ) THEN
+             CALL iom_open ( cl_obc_wV , id_w )
+             CALL iom_get ( id_w, jpdom_unknown, 'vomecrty', vwdta(njw0:njw1,:,nt_x), &
+                  &               ktime=ntobc_x , kstart=istart, kcount= icount )
+             CALL iom_close ( id_w )
+          ENDIF
 
           ! mask the boundary values
@@ -1322,8 +1335,10 @@
           CALL iom_close (id_n)
           !
-          CALL iom_open ( cl_obc_nU , id_n )
-          CALL iom_get  ( id_n, jpdom_unknown, 'vozocrtx', undta(nin0:nin1,:,nt_x), &
-               &               ktime=ntobc_x , kstart=istart, kcount= icount )
-          CALL iom_close ( id_n )
+          IF ( ln_obc_tangential ) THEN
+             CALL iom_open ( cl_obc_nU , id_n )
+             CALL iom_get  ( id_n, jpdom_unknown, 'vozocrtx', undta(nin0:nin1,:,nt_x), &
+                  &               ktime=ntobc_x , kstart=istart, kcount= icount )
+             CALL iom_close ( id_n )
+          ENDIF
           !
           CALL iom_open ( cl_obc_nV , id_n )
@@ -1387,8 +1402,10 @@
           CALL iom_close (id_s)
           !
-          CALL iom_open ( cl_obc_sU , id_s )
-          CALL iom_get  ( id_s, jpdom_unknown, 'vozocrtx', usdta(nis0:nis1,:,nt_x), &
-               &               ktime=ntobc_x , kstart=istart, kcount= icount )
-          CALL iom_close ( id_s )
+          IF ( ln_obc_tangential ) THEN
+             CALL iom_open ( cl_obc_sU , id_s )
+             CALL iom_get  ( id_s, jpdom_unknown, 'vozocrtx', usdta(nis0:nis1,:,nt_x), &
+                  &               ktime=ntobc_x , kstart=istart, kcount= icount )
+             CALL iom_close ( id_s )
+          ENDIF
           !
           CALL iom_open ( cl_obc_sV , id_s )
Index: /branches/TAM_V3_0/NEMO/OPA_SRC/OBC/obcdyn.F90
===================================================================
--- /branches/TAM_V3_0/NEMO/OPA_SRC/OBC/obcdyn.F90	(revision 1883)
+++ /branches/TAM_V3_0/NEMO/OPA_SRC/OBC/obcdyn.F90	(revision 1884)
@@ -47,4 +47,6 @@
    REAL(wp) ::   rtaue  , rtauw  , rtaun  , rtaus  ,  &
                  rtauein, rtauwin, rtaunin, rtausin
+
+   LOGICAL  ::   ll_fbc
 
    !!---------------------------------------------------------------------------------
@@ -102,8 +104,14 @@
       END IF
 
-      IF( lp_obc_east  )   CALL obc_dyn_east ( kt )
-      IF( lp_obc_west  )   CALL obc_dyn_west ( kt )
-      IF( lp_obc_north )   CALL obc_dyn_north( kt )
-      IF( lp_obc_south )   CALL obc_dyn_south( kt )
+      ll_fbc = ( ( ( kt < nit000+3  ) .AND. .NOT.  ln_rstart     ) .OR. lk_dynspg_exp ) 
+
+      IF ( cp_cfg == "indian" ) THEN
+         ll_fbc = ( ( ( kt < nit000+30 ) .AND. .NOT.  ln_obc_rstart ) .OR. lk_dynspg_exp ) 
+      ENDIF
+
+      IF( lp_obc_east  )   CALL obc_dyn_east !( kt )
+      IF( lp_obc_west  )   CALL obc_dyn_west !( kt )
+      IF( lp_obc_north )   CALL obc_dyn_north!( kt )
+      IF( lp_obc_south )   CALL obc_dyn_south!( kt )
 
       IF( lk_mpp ) THEN
@@ -119,5 +127,5 @@
 
 
-   SUBROUTINE obc_dyn_east ( kt )
+   SUBROUTINE obc_dyn_east
       !!------------------------------------------------------------------------------
       !!                  ***  SUBROUTINE obc_dyn_east  ***
@@ -137,5 +145,4 @@
       !!------------------------------------------------------------------------------
       !! * Arguments
-      INTEGER, INTENT( in ) ::   kt
 
       !! * Local declaration
@@ -147,5 +154,5 @@
       ! --------------------------------------------------------
 
-      IF( ( kt < nit000+3 .AND. .NOT.ln_rstart ) .OR. lfbceast .OR. lk_dynspg_exp ) THEN
+      IF ( ll_fbc .OR. lfbceast ) THEN
 
          ! 1.1 U zonal velocity    
@@ -282,5 +289,5 @@
 
 
-   SUBROUTINE obc_dyn_west ( kt )
+   SUBROUTINE obc_dyn_west
       !!------------------------------------------------------------------------------
       !!                  ***  SUBROUTINE obc_dyn_west  ***
@@ -300,5 +307,4 @@
       !!------------------------------------------------------------------------------
       !! * Arguments
-      INTEGER, INTENT( in ) ::   kt
 
       !! * Local declaration
@@ -310,5 +316,5 @@
       ! --------------------------------------------------------
 
-      IF( ( kt < nit000+3 .AND. .NOT.ln_rstart ) .OR. lfbcwest .OR. lk_dynspg_exp ) THEN
+      IF ( ll_fbc .OR. lfbcwest ) THEN
 
          ! 1.1 U zonal velocity
@@ -443,5 +449,5 @@
    END SUBROUTINE obc_dyn_west
 
-   SUBROUTINE obc_dyn_north ( kt )
+   SUBROUTINE obc_dyn_north
       !!------------------------------------------------------------------------------
       !!                     SUBROUTINE obc_dyn_north
@@ -461,5 +467,4 @@
       !!------------------------------------------------------------------------------
       !! * Arguments
-      INTEGER, INTENT( in ) ::   kt
 
       !! * Local declaration
@@ -471,6 +476,6 @@
       ! ---------------------------------------------------------
  
-      IF( ( kt < nit000+3 .AND. .NOT.ln_rstart ) .OR. lfbcnorth  .OR. lk_dynspg_exp ) THEN
-
+        IF ( ll_fbc .OR. lfbcnorth ) THEN
+    
          ! 1.1 U zonal velocity
          ! --------------------
@@ -611,9 +616,11 @@
          END DO
 # endif
+
+
       END IF
 
    END SUBROUTINE obc_dyn_north
 
-   SUBROUTINE obc_dyn_south ( kt )
+   SUBROUTINE obc_dyn_south
       !!------------------------------------------------------------------------------
       !!                     SUBROUTINE obc_dyn_south
@@ -633,5 +640,4 @@
       !!------------------------------------------------------------------------------
       !! * Arguments
-      INTEGER, INTENT( in ) ::   kt
 
       !! * Local declaration
@@ -646,6 +652,6 @@
       ! ---------------------------------------------------------
 
-      IF( ( kt < nit000+3 .AND. .NOT.ln_rstart ) .OR. lfbcsouth  .OR. lk_dynspg_exp ) THEN
-
+      IF ( ll_fbc .OR. lfbcsouth ) THEN
+      
          ! 1.1 U zonal velocity
          ! --------------------
Index: /branches/TAM_V3_0/NEMO/OPA_SRC/OBC/obcini.F90
===================================================================
--- /branches/TAM_V3_0/NEMO/OPA_SRC/OBC/obcini.F90	(revision 1883)
+++ /branches/TAM_V3_0/NEMO/OPA_SRC/OBC/obcini.F90	(revision 1884)
@@ -19,4 +19,7 @@
    USE in_out_manager  ! I/O units
    USE dynspg_oce      ! flag lk_dynspg_flt
+#if defined key_pomme_r025
+   USE iom
+#endif
 
    IMPLICIT NONE
@@ -64,4 +67,7 @@
       !! * Local declarations
       INTEGER  ::   ji, jj, istop , inumfbc
+#if defined key_pomme_r025
+      INTEGER inum0
+#endif
       INTEGER, DIMENSION(4) ::   icorner
       REAL(wp) ::   zbsic1, zbsic2, zbsic3
@@ -111,5 +117,5 @@
       IF(lwp) WRITE(numout,*) '         Number of open boundaries    nbobc = ',nbobc
       IF(lwp) WRITE(numout,*)
-      IF( nbobc /= 0 .AND. jperio /= 0 ) &
+      IF( nbobc >=  2 .AND. jperio /= 0 ) &
            &   CALL ctl_stop( ' Cyclic or symmetric, and open boundary condition are not compatible' )
 
@@ -433,4 +439,16 @@
       ENDIF
 
+#if defined key_pomme_r025
+      
+      IF ( nmsh == 1 ) THEN
+         WRITE(numout,*) 'obc_init : appending obc masks in mesh_mask.nc'
+         CALL iom_open( 'mesh_mask_obc.nc', inum0, ldwrt = .TRUE., kiolib = jprstlib )
+         CALL iom_rstput( 0, 0, inum0, 'obctmsk', obctmsk )
+         CALL iom_rstput( 0, 0, inum0, 'obcumask', obcumask )
+         CALL iom_rstput( 0, 0, inum0, 'obcvmask', obcvmask )
+         CALL iom_close(inum0)
+      ENDIF
+#endif
+
       IF (lk_dynspg_rl ) THEN 
         ! do nothing particular
@@ -441,41 +459,66 @@
            ! 3.1 Total lateral surface 
            ! -------------------------
-           obcsurftot = 0.e0
+
+
+           MPI_CHK : IF ( nbit_cmp == 1 ) THEN
+
+              IF(         ( lp_obc_west  .AND. lp_obc_west_barotp_corr )  &
+                   & .OR. ( lp_obc_east  .AND. lp_obc_east_barotp_corr )  &
+                   & .OR. ( lp_obc_north .AND. lp_obc_north_barotp_corr ) &
+                   & .OR. ( lp_obc_south .AND. lp_obc_south_barotp_corr )   ) THEN
+                 IF(lwp)WRITE(numout,cform_war)
+                 IF(lwp)WRITE(numout,*) '           nbit_cmp = 1 => no barotropic redistribution along OBCs is enforced'
+                 nwarn = nwarn + 1
+              ENDIF
+              
+           ELSE
+              
+              obcsurfeast  = 0.e0       ;       obcsurfwest  = 0.e0
+              obcsurfnorth = 0.e0       ;       obcsurfsouth = 0.e0
+              obcsurftot = 0.e0
   
-           IF( lp_obc_east ) THEN ! ... East open boundary lateral surface
-              DO ji = nie0, nie1
-                 DO jj = 1, jpj 
-                    obcsurftot = obcsurftot+hu(ji,jj)*e2u(ji,jj)*uemsk(jj,1) * MAX(obctmsk(ji,jj),obctmsk(ji+1,jj) )
+              IF( lp_obc_east .AND. lp_obc_east_barotp_corr ) THEN ! ... East open boundary lateral surface
+                 DO ji = nie0, nie1
+                    DO jj = 1, jpj 
+                       obcsurfeast = obcsurfeast+hu(ji,jj)*e2u(ji,jj)*uemsk(jj,1) * MAX(obctmsk(ji,jj),obctmsk(ji+1,jj) )
+                    END DO
                  END DO
-              END DO
-           END IF
-  
-           IF( lp_obc_west ) THEN ! ... West open boundary lateral surface
-              DO ji = niw0, niw1
-                 DO jj = 1, jpj 
-                    obcsurftot = obcsurftot+hu(ji,jj)*e2u(ji,jj)*uwmsk(jj,1) * MAX(obctmsk(ji,jj),obctmsk(ji+1,jj) )
+                 obcsurftot = obcsurftot + obcsurfeast
+              END IF
+              
+              IF( lp_obc_west .AND. lp_obc_west_barotp_corr ) THEN ! ... West open boundary lateral surface
+                 DO ji = niw0, niw1
+                    DO jj = 1, jpj 
+                       obcsurfwest = obcsurfwest+hu(ji,jj)*e2u(ji,jj)*uwmsk(jj,1) * MAX(obctmsk(ji,jj),obctmsk(ji+1,jj) )
+                    END DO
                  END DO
-              END DO
-           END IF
-  
-           IF( lp_obc_north ) THEN ! ... North open boundary lateral surface
-              DO jj = njn0, njn1
-                 DO ji = 1, jpi
-                    obcsurftot = obcsurftot+hv(ji,jj)*e1v(ji,jj)*vnmsk(ji,1) * MAX(obctmsk(ji,jj),obctmsk(ji,jj+1) )
+                 obcsurftot = obcsurftot + obcsurfwest
+              END IF
+              
+              IF( lp_obc_north .AND. lp_obc_north_barotp_corr ) THEN  ! ... North open boundary lateral surface
+                 DO jj = njn0, njn1
+                    DO ji = 1, jpi
+                       obcsurfnorth = obcsurfnorth+hv(ji,jj)*e1v(ji,jj)*vnmsk(ji,1) * MAX(obctmsk(ji,jj),obctmsk(ji,jj+1) )
+                    END DO
                  END DO
-              END DO
-           END IF
-  
-           IF( lp_obc_south ) THEN ! ... South open boundary lateral surface
-              DO jj = njs0, njs1
-                 DO ji = 1, jpi
-                    obcsurftot = obcsurftot+hv(ji,jj)*e1v(ji,jj)*vsmsk(ji,1) * MAX(obctmsk(ji,jj),obctmsk(ji,jj+1) )
+                 obcsurftot = obcsurftot + obcsurfnorth
+              END IF
+              
+              IF( lp_obc_south .AND. lp_obc_south_barotp_corr ) THEN ! ... South open boundary lateral surface
+                 DO jj = njs0, njs1
+                    DO ji = 1, jpi
+                       obcsurftot = obcsurftot+hv(ji,jj)*e1v(ji,jj)*vsmsk(ji,1) * MAX(obctmsk(ji,jj),obctmsk(ji,jj+1) )
+                    END DO
                  END DO
-              END DO
-           END IF
-  
-           IF( lk_mpp )   CALL mpp_sum( obcsurftot )   ! sum over the global domain
+                 obcsurftot = obcsurftot + obcsurfsouth
+              END IF
+              
+              IF( lk_mpp )   CALL mpp_sum( obcsurftot )   ! sum over the global domain
+
+           ENDIF MPI_CHK
+
         ENDIF
-      ENDIF  ! rigid lid
+
+     ENDIF  ! rigid lid
 
       ! 5. Control print on mask 
@@ -603,8 +646,29 @@
       ! --------------------------------------------------------------
       !   only if at least one boundary is  radiative 
-      IF ( inumfbc < nbobc .AND.  ln_rstart ) THEN
-         !  Restart from restart.obc
-         CALL obc_rst_read
-      ELSE
+
+       !  Restart from restart.obc
+
+!--> IND025 Begin
+       IF(lwp) WRITE(numout,*)
+       IF(lwp) WRITE(numout,*) ' obcini : '
+       IF(lwp) WRITE(numout,*) '   ln_rstart     : ', ln_rstart
+       IF(lwp) WRITE(numout,*) '   ln_obc_rstart : ', ln_obc_rstart
+       
+       IF ( .NOT. ln_rstart .AND. ln_obc_rstart ) THEN
+          IF(lwp) WRITE(numout,*) ' obcini : Warning!! ln_rstart = .F. => we force ln_obc_rstart =.F. '
+          ln_obc_rstart = .FALSE.
+       ENDIF 
+
+       IF ( ln_rstart .AND. ln_obc_rstart ) THEN
+          IF  ( inumfbc < nbobc ) THEN
+             IF(lwp) WRITE(numout,*) '   => We read the OBC restart file '
+             CALL obc_rst_read
+          ELSE
+             IF(lwp) WRITE(numout,*) '   => We DO NOT read the OBC restart file (since all OBCs are fixed) '
+          ENDIF
+          
+!<-- IND025 End       
+
+       ELSE
 
 !         ! ... Initialization to zero of radiation arrays.
Index: /branches/TAM_V3_0/NEMO/OPA_SRC/OBC/obctra.F90
===================================================================
--- /branches/TAM_V3_0/NEMO/OPA_SRC/OBC/obctra.F90	(revision 1883)
+++ /branches/TAM_V3_0/NEMO/OPA_SRC/OBC/obctra.F90	(revision 1884)
@@ -43,4 +43,6 @@
       rtauein, rtauwin, rtaunin, rtausin      ! Boundary restoring coefficient for inflow 
 
+   LOGICAL  ::   ll_fbc
+   
    !! * Substitutions
 #  include "obc_vectopt_loop_substitute.h90"
@@ -91,11 +93,18 @@
       END IF
 
-      IF( lp_obc_east  )   CALL obc_tra_east ( kt )    ! East open boundary
-
-      IF( lp_obc_west  )   CALL obc_tra_west ( kt )    ! West open boundary
-
-      IF( lp_obc_north )   CALL obc_tra_north( kt )    ! North open boundary
-
-      IF( lp_obc_south )   CALL obc_tra_south( kt )    ! South open boundary
+      ll_fbc = ( ( kt < nit000+3 ) .AND. .NOT. ln_rstart )
+      
+      IF ( cp_cfg == "indian" ) THEN
+         ll_fbc = ( ( kt < nit000+30 ) .AND. .NOT. ln_obc_rstart )
+      ENDIF
+
+      IF( lp_obc_east  )   CALL obc_tra_east     ! East open boundary
+
+      IF( lp_obc_west  )   CALL obc_tra_west     ! West open boundary
+
+      IF( lp_obc_north )   CALL obc_tra_north    ! North open boundary
+
+      IF( lp_obc_south )   CALL obc_tra_south    ! South open boundary
+
 
       IF( lk_mpp ) THEN                  !!bug ???
@@ -111,5 +120,5 @@
 
 
-   SUBROUTINE obc_tra_east ( kt )
+   SUBROUTINE obc_tra_east
       !!------------------------------------------------------------------------------
       !!                ***  SUBROUTINE obc_tra_east  ***
@@ -128,5 +137,4 @@
       !!------------------------------------------------------------------------------
       !! * Arguments
-      INTEGER, INTENT( in ) ::   kt
 
       !! * Local declaration
@@ -139,6 +147,7 @@
       ! --------------------------------------------------------
 
-      IF( ( kt < nit000+3 .AND. .NOT.ln_rstart ) .OR. lfbceast ) THEN
-         DO ji = fs_nie0+1, fs_nie1+1 ! Vector opt.
+      IF ( ll_fbc .OR. lfbceast ) THEN
+
+        DO ji = fs_nie0+1, fs_nie1+1 ! Vector opt.
             DO jk = 1, jpkm1
                DO jj = 1, jpj
@@ -211,5 +220,5 @@
 
 
-   SUBROUTINE obc_tra_west ( kt )
+   SUBROUTINE obc_tra_west
       !!------------------------------------------------------------------------------
       !!                 ***  SUBROUTINE obc_tra_west  ***
@@ -228,5 +237,4 @@
       !!------------------------------------------------------------------------------
       !! * Arguments
-      INTEGER, INTENT( in ) ::   kt
 
       !! * Local declaration
@@ -239,5 +247,5 @@
       ! --------------------------------------------------------
 
-      IF( ( kt < nit000+3 .AND. .NOT.ln_rstart ) .OR. lfbcwest ) THEN
+      IF ( ll_fbc .OR. lfbcwest ) THEN
 
          DO ji = fs_niw0, fs_niw1 ! Vector opt.
@@ -310,5 +318,5 @@
 
 
-   SUBROUTINE obc_tra_north ( kt )
+   SUBROUTINE obc_tra_north
       !!------------------------------------------------------------------------------
       !!                 ***  SUBROUTINE obc_tra_north  ***
@@ -327,5 +335,4 @@
       !!------------------------------------------------------------------------------
       !! * Arguments
-      INTEGER, INTENT( in ) ::   kt
 
       !! * Local declaration
@@ -338,5 +345,5 @@
       ! --------------------------------------------------------
 
-      IF( ( kt < nit000+3 .AND. .NOT.ln_rstart ) .OR. lfbcnorth ) THEN
+      IF ( ll_fbc .OR. lfbcnorth ) THEN
 
          DO jj = fs_njn0+1, fs_njn1+1  ! Vector opt.
@@ -412,5 +419,5 @@
 
 
-   SUBROUTINE obc_tra_south ( kt )
+   SUBROUTINE obc_tra_south
       !!------------------------------------------------------------------------------
       !!                ***  SUBROUTINE obc_tra_south  ***
@@ -429,5 +436,4 @@
       !!------------------------------------------------------------------------------
       !! * Arguments
-      INTEGER, INTENT( in ) ::   kt
 
       !! * Local declaration
@@ -440,5 +446,5 @@
       ! --------------------------------------------------------
 
-      IF( ( kt < nit000+3 .AND. .NOT.ln_rstart ) .OR. lfbcsouth ) THEN
+      IF ( ll_fbc .OR. lfbcsouth ) THEN
 
          DO jj = fs_njs0, fs_njs1  ! Vector opt.
Index: /branches/TAM_V3_0/NEMO/OPA_SRC/TRA/tradmp.F90
===================================================================
--- /branches/TAM_V3_0/NEMO/OPA_SRC/TRA/tradmp.F90	(revision 1883)
+++ /branches/TAM_V3_0/NEMO/OPA_SRC/TRA/tradmp.F90	(revision 1884)
@@ -41,4 +41,5 @@
 
    PUBLIC tra_dmp      ! routine called by step.F90
+   PUBLIC cofdis, dtacof, dtacof_zoom
 
 #if ! defined key_agrif
Index: /branches/TAM_V3_0/NEMO/OPA_SRC/TRA/traqsr.F90
===================================================================
--- /branches/TAM_V3_0/NEMO/OPA_SRC/TRA/traqsr.F90	(revision 1883)
+++ /branches/TAM_V3_0/NEMO/OPA_SRC/TRA/traqsr.F90	(revision 1884)
@@ -38,6 +38,6 @@
    LOGICAL , PUBLIC ::   ln_qsr_sms = .false. ! flag to use or not the biological fluxes for light 
    
-   INTEGER ::   nksr   ! number of levels
-   REAL(wp), DIMENSION(jpk) ::   gdsr   ! profile of the solar flux penetration
+   INTEGER , PUBLIC ::   nksr   ! number of levels
+   REAL(wp), DIMENSION(jpk) , PUBLIC ::   gdsr   ! profile of the solar flux penetration
 
    !! * Substitutions
Index: /branches/TAM_V3_0/NEMO/OPA_SRC/TRA/trazdf_imp.F90
===================================================================
--- /branches/TAM_V3_0/NEMO/OPA_SRC/TRA/trazdf_imp.F90	(revision 1883)
+++ /branches/TAM_V3_0/NEMO/OPA_SRC/TRA/trazdf_imp.F90	(revision 1884)
@@ -169,5 +169,9 @@
          DO jj = 2, jpjm1
             DO ji = fs_2, fs_jpim1   ! vector opt.
+#if defined key_vvl
                zvsfvvl = fsve3t(ji,jj,jk) * ( 1 + ssha(ji,jj) * mut(ji,jj,jk) )
+#else
+               zvsfvvl = fsve3t(ji,jj,jk)
+#endif
                ze3ta = ( 1. - znvvl ) + znvvl*zvsfvvl                                ! after scale factor at T-point
                ze3tn = ( 1. - znvvl )*fse3t(ji,jj,jk) + znvvl                        ! now   scale factor at T-point
@@ -182,5 +186,9 @@
       DO jj = 2, jpjm1
          DO ji = fs_2, fs_jpim1   ! vector opt.
+#if defined key_vvl
             zvsfvvl = fsve3t(ji,jj,1) * ( 1 + ssha(ji,jj) * mut(ji,jj,1) )
+#else
+            zvsfvvl = fsve3t(ji,jj,1)
+#endif
             ze3ta = ( 1. - znvvl ) + znvvl*zvsfvvl                                   ! after scale factor at T-point
             zwi(ji,jj,1) = 0.e0
@@ -227,5 +235,9 @@
       DO jj = 2, jpjm1
          DO ji = fs_2, fs_jpim1
+#if defined key_vvl
             zvsfvvl = fsve3t(ji,jj,1) * ( 1 + sshb(ji,jj) * mut(ji,jj,1) )
+#else
+            zvsfvvl = fsve3t(ji,jj,1)
+#endif
             ze3tb = ( 1. - znvvl ) + znvvl*zvsfvvl
             ze3tn = ( 1. - znvvl ) + znvvl*fse3t (ji,jj,1)
@@ -236,5 +248,9 @@
          DO jj = 2, jpjm1
             DO ji = fs_2, fs_jpim1
+#if defined key_vvl
                zvsfvvl = fsve3t(ji,jj,jk) * ( 1 + sshb(ji,jj) * mut(ji,jj,jk) )
+#else
+               zvsfvvl = fsve3t(ji,jj,jk)
+#endif
                ze3tb = ( 1. - znvvl ) + znvvl*zvsfvvl
                ze3tn = ( 1. - znvvl ) + znvvl*fse3t (ji,jj,jk)
@@ -271,5 +287,9 @@
          DO jj = 2, jpjm1
             DO ji = fs_2, fs_jpim1   ! vector opt.
+#if defined key_vvl
                zvsfvvl = fsve3t(ji,jj,jk) * ( 1 + ssha(ji,jj) * mut(ji,jj,jk) )
+#else
+               zvsfvvl = fsve3t(ji,jj,jk)
+#endif
                ze3ta = ( 1. - znvvl ) + znvvl*zvsfvvl                                      ! after scale factor at T-point
                ze3tn = ( 1. - znvvl )*fse3t(ji,jj,jk) + znvvl                              ! now   scale factor at T-point
@@ -284,5 +304,9 @@
       DO jj = 2, jpjm1
          DO ji = fs_2, fs_jpim1   ! vector opt.
+#if defined key_vvl
             zvsfvvl = fsve3t(ji,jj,1) * ( 1 + ssha(ji,jj) * mut(ji,jj,1) )
+#else
+            zvsfvvl = fsve3t(ji,jj,1)
+#endif
             ze3ta = ( 1. - znvvl ) + znvvl*zvsfvvl                                          ! after scale factor at T-point
             zwi(ji,jj,1) = 0.e0
@@ -328,5 +352,9 @@
       DO jj = 2, jpjm1
          DO ji = fs_2, fs_jpim1
+#if defined key_vvl
             zvsfvvl = fsve3t(ji,jj,1) * ( 1 + sshb(ji,jj) * mut(ji,jj,1) )
+#else
+            zvsfvvl = fsve3t(ji,jj,1) 
+#endif
             ze3tb = ( 1. - znvvl ) + znvvl*zvsfvvl                               ! before scale factor at T-point
             ze3tn = ( 1. - znvvl ) + znvvl*fse3t(ji,jj,1)                        ! now    scale factor at T-point
@@ -337,5 +365,9 @@
          DO jj = 2, jpjm1
             DO ji = fs_2, fs_jpim1
+#if defined key_vvl
                zvsfvvl = fsve3t(ji,jj,jk) * ( 1 + sshb(ji,jj) * mut(ji,jj,jk) )
+#else
+               zvsfvvl = fsve3t(ji,jj,jk) 
+#endif
                ze3tb = ( 1. - znvvl ) + znvvl*zvsfvvl                            ! before scale factor at T-point
                ze3tn = ( 1. - znvvl ) + znvvl*fse3t(ji,jj,jk)                    ! now    scale factor at T-point
Index: /branches/TAM_V3_0/NEMO/OPA_SRC/ZDF/zdftke.F90
===================================================================
--- /branches/TAM_V3_0/NEMO/OPA_SRC/ZDF/zdftke.F90	(revision 1883)
+++ /branches/TAM_V3_0/NEMO/OPA_SRC/ZDF/zdftke.F90	(revision 1884)
@@ -49,4 +49,5 @@
 
    PUBLIC   zdf_tke    ! routine called in step module
+   PUBLIC   tke_rst
 
    LOGICAL , PUBLIC, PARAMETER              ::   lk_zdftke = .TRUE.  !: TKE vertical mixing flag
Index: /branches/TAM_V3_0/NEMO/OPA_SRC/daymod.F90
===================================================================
--- /branches/TAM_V3_0/NEMO/OPA_SRC/daymod.F90	(revision 1883)
+++ /branches/TAM_V3_0/NEMO/OPA_SRC/daymod.F90	(revision 1884)
@@ -38,4 +38,5 @@
    PUBLIC day        ! called by step.F90
    PUBLIC day_init   ! called by istate.F90
+   PUBLIC day_mth    ! called by daymod_tam.F90
 
    INTEGER , PUBLIC ::   nyear       !: current year
Index: /branches/TAM_V3_0/NEMO/OPA_SRC/eosbn2.F90
===================================================================
--- /branches/TAM_V3_0/NEMO/OPA_SRC/eosbn2.F90	(revision 1883)
+++ /branches/TAM_V3_0/NEMO/OPA_SRC/eosbn2.F90	(revision 1884)
@@ -55,7 +55,7 @@
    REAL(wp), PUBLIC ::   ralpha = 2.0e-4   !: thermal expension coeff. (linear equation of state)
    REAL(wp), PUBLIC ::   rbeta  = 7.7e-4   !: saline  expension coeff. (linear equation of state)
+
+   INTEGER, PUBLIC  ::   neos_init = 0     !: control flag for initialization
    
-   INTEGER ::   neos_init = 0         !: control flag for initialization
-
    !! * Substitutions
 #  include "domzgr_substitute.h90"
Index: /branches/TAM_V3_0/NEMO/OPA_SRC/geo2ocean.F90
===================================================================
--- /branches/TAM_V3_0/NEMO/OPA_SRC/geo2ocean.F90	(revision 1883)
+++ /branches/TAM_V3_0/NEMO/OPA_SRC/geo2ocean.F90	(revision 1884)
@@ -3,5 +3,9 @@
    !!                     ***  MODULE  geo2ocean  ***
    !! Ocean mesh    :  ???
-   !!=====================================================================
+   !!======================================================================
+   !! History :  OPA  !  07-1996  (O. Marti)  Original code
+   !!   NEMO     1.0  !  02-2008  (G. Madec)  F90: Free form
+   !!            3.0  !  
+   !!----------------------------------------------------------------------
 
    !!----------------------------------------------------------------------
@@ -11,5 +15,4 @@
    !!   repere      :   old routine suppress it ???
    !!----------------------------------------------------------------------
-   !! * Modules used
    USE dom_oce         ! mesh and scale factors
    USE phycst          ! physical constants
@@ -18,12 +21,11 @@
 
    IMPLICIT NONE
-
-   !! * Accessibility
    PRIVATE
-   PUBLIC rot_rep, repcmo, repere, geo2oce   ! only rot_rep should be used
+
+   PUBLIC   rot_rep, repcmo, repere, geo2oce, oce2geo   ! only rot_rep should be used
                                              ! repcmo and repere are keep only for compatibility.
                                              ! they are only a useless overlay of rot_rep
-
-   !! * Module variables
+   PUBLIC   obs_rot
+
    REAL(wp), DIMENSION(jpi,jpj) ::   &
       gsint, gcost,   &  ! cos/sin between model grid lines and NP direction at T point
@@ -34,11 +36,11 @@
    LOGICAL ::   lmust_init = .TRUE.        !: used to initialize the cos/sin variables (se above)
 
-  !! * Substitutions
+   !! * Substitutions
 #  include "vectopt_loop_substitute.h90"
-   !!---------------------------------------------------------------------------------
-   !!   OPA 9.0 , LOCEAN-IPSL (2005) 
-   !! $Id$
-   !! This software is governed by the CeCILL licence see modipsl/doc/NEMO_CeCILL.txt 
-   !!---------------------------------------------------------------------------------
+   !!----------------------------------------------------------------------
+   !! NEMO/OPA 3.0 , LOCEAN-IPSL (2008) 
+   !! $Id$ 
+   !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt)
+   !!----------------------------------------------------------------------
 
 CONTAINS
@@ -54,23 +56,15 @@
       !! ** Method  :   Initialization of arrays at the first call.
       !!
-      !! ** Action  : - px2 : first componante (defined at u point)
+      !! ** Action  : - px2 : first  componante (defined at u point)
       !!              - py2 : second componante (defined at v point)
-      !!
-      !! History :
-      !!   7.0  !  07-96  (O. Marti)  Original code
-      !!   8.5  !  02-08  (G. Madec)  F90: Free form
-      !!----------------------------------------------------------------------
-      !! * Arguments 
-      REAL(wp), INTENT( in ), DIMENSION(jpi,jpj) ::   & 
-         pxu1, pyu1,     & ! geographic vector componantes at u-point
-         pxv1, pyv1        ! geographic vector componantes at v-point
-      REAL(wp), INTENT( out ), DIMENSION(jpi,jpj) ::   & 
-         px2,            & ! i-componante (defined at u-point)
-         py2               ! j-componante (defined at v-point)
+      !!----------------------------------------------------------------------
+      REAL(wp), INTENT(in   ), DIMENSION(jpi,jpj) ::   pxu1, pyu1   ! geographic vector componantes at u-point
+      REAL(wp), INTENT(in   ), DIMENSION(jpi,jpj) ::   pxv1, pyv1   ! geographic vector componantes at v-point
+      REAL(wp), INTENT(  out), DIMENSION(jpi,jpj) ::   px2          ! i-componante (defined at u-point)
+      REAL(wp), INTENT(  out), DIMENSION(jpi,jpj) ::   py2          ! j-componante (defined at v-point)
       !!----------------------------------------------------------------------
       
       ! Change from geographic to stretched coordinate
       ! ----------------------------------------------
-      
       CALL rot_rep( pxu1, pyu1, 'U', 'en->i',px2 )
       CALL rot_rep( pxv1, pyv1, 'V', 'en->j',py2 )
@@ -90,5 +84,4 @@
       !!                  (O. Marti ) Original code (repere and repcmo)
       !!----------------------------------------------------------------------
-      !! * Arguments 
       REAL(wp), DIMENSION(jpi,jpj), INTENT( IN ) ::   pxin, pyin   ! vector componantes
       CHARACTER(len=1),             INTENT( IN ) ::   cd_type      ! define the nature of pt2d array grid-points
@@ -172,7 +165,6 @@
       !!   9.2  !  07-04  (S. Masson)  Add T, F points and bugfix in cos lateral boundary
       !!----------------------------------------------------------------------
-      !! * local declarations
       INTEGER ::   ji, jj      ! dummy loop indices
-
+      !!
       REAL(wp) ::   &
          zlam, zphi,            &  ! temporary scalars
@@ -320,14 +312,14 @@
 
       ! lateral boundary cond.: T-, U-, V-, F-pts, sgn
-      CALL lbc_lnk ( gcost, 'T', 1. )   ;   CALL lbc_lnk( gsint, 'T', -1. )
-      CALL lbc_lnk ( gcosu, 'U', 1. )   ;   CALL lbc_lnk( gsinu, 'U', -1. )
-      CALL lbc_lnk ( gcosv, 'V', 1. )   ;   CALL lbc_lnk( gsinv, 'V', -1. )
-      CALL lbc_lnk ( gcosf, 'F', 1. )   ;   CALL lbc_lnk( gsinf, 'F', -1. )
+      CALL lbc_lnk( gcost, 'T', 1. )   ;   CALL lbc_lnk( gsint, 'T', -1. )
+      CALL lbc_lnk( gcosu, 'U', 1. )   ;   CALL lbc_lnk( gsinu, 'U', -1. )
+      CALL lbc_lnk( gcosv, 'V', 1. )   ;   CALL lbc_lnk( gsinv, 'V', -1. )
+      CALL lbc_lnk( gcosf, 'F', 1. )   ;   CALL lbc_lnk( gsinf, 'F', -1. )
 
    END SUBROUTINE angle
 
 
-   SUBROUTINE geo2oce ( pxx , pyy , pzz, cgrid,     &
-                        plon, plat, pte, ptn  , ptv )
+   SUBROUTINE geo2oce ( pxx, pyy, pzz, cgrid,     &
+                        pte, ptn )
       !!----------------------------------------------------------------------
       !!                    ***  ROUTINE geo2oce  ***
@@ -344,57 +336,142 @@
       !!        !  00-08  (D. Ludicone) Reduced section at Bab el Mandeb
       !!   8.5  !  02-06  (G. Madec)  F90: Free form
-      !!----------------------------------------------------------------------
-      !! * Local declarations
-      REAL(wp), INTENT( in ), DIMENSION(jpi,jpj) ::   &
-         pxx, pyy, pzz
-      CHARACTER (len=1), INTENT( in) ::   &
-         cgrid
-      REAL(wp), INTENT( in ), DIMENSION(jpi,jpj) ::   &
-         plon, plat
-      REAL(wp), INTENT(out), DIMENSION(jpi,jpj) ::    &
-         pte, ptn, ptv
+      !!   3.0  !  07-08  (G. Madec)  geo2oce suppress lon/lat agruments
+      !!----------------------------------------------------------------------
+      REAL(wp), DIMENSION(jpi,jpj), INTENT(in   ) ::  pxx, pyy, pzz
+      CHARACTER(len=1)            , INTENT(in   ) ::  cgrid
+      REAL(wp), DIMENSION(jpi,jpj), INTENT(  out) ::  pte, ptn
+      !!
       REAL(wp), PARAMETER :: rpi = 3.141592653E0
       REAL(wp), PARAMETER :: rad = rpi / 180.e0
-
-      !! * Local variables
       INTEGER ::   ig     !
-
       !! * Local save
-      REAL(wp), SAVE, DIMENSION(jpi,jpj,4) ::   &
-         zsinlon, zcoslon,   &
-         zsinlat, zcoslat
-      LOGICAL, SAVE, DIMENSION (4) ::   &
-         linit = .FALSE.
+      REAL(wp), SAVE, DIMENSION(jpi,jpj,4) ::   zsinlon, zcoslon, zsinlat, zcoslat
+      LOGICAL , SAVE, DIMENSION(4)         ::   linit = .FALSE.
       !!----------------------------------------------------------------------
 
       SELECT CASE( cgrid)
-
-         CASE ( 't' ) ;; ig = 1
-         CASE ( 'u' ) ;; ig = 2
-         CASE ( 'v' ) ;; ig = 3
-         CASE ( 'f' ) ;; ig = 4
-
-         CASE default
+         CASE ( 'T' )   
+            ig = 1
+            IF( .NOT. linit(ig) ) THEN 
+               zsinlon(:,:,ig) = SIN( rad * glamt(:,:) )
+               zcoslon(:,:,ig) = COS( rad * glamt(:,:) )
+               zsinlat(:,:,ig) = SIN( rad * gphit(:,:) )
+               zcoslat(:,:,ig) = COS( rad * gphit(:,:) )
+               linit(ig) = .TRUE.
+            ENDIF
+         CASE ( 'U' )   
+            ig = 2
+            IF( .NOT. linit(ig) ) THEN 
+               zsinlon(:,:,ig) = SIN( rad * glamu(:,:) )
+               zcoslon(:,:,ig) = COS( rad * glamu(:,:) )
+               zsinlat(:,:,ig) = SIN( rad * gphiu(:,:) )
+               zcoslat(:,:,ig) = COS( rad * gphiu(:,:) )
+               linit(ig) = .TRUE.
+            ENDIF
+         CASE ( 'V' )   
+            ig = 3
+            IF( .NOT. linit(ig) ) THEN 
+               zsinlon(:,:,ig) = SIN( rad * glamv(:,:) )
+               zcoslon(:,:,ig) = COS( rad * glamv(:,:) )
+               zsinlat(:,:,ig) = SIN( rad * gphiv(:,:) )
+               zcoslat(:,:,ig) = COS( rad * gphiv(:,:) )
+               linit(ig) = .TRUE.
+            ENDIF
+         CASE ( 'F' )   
+            ig = 4
+            IF( .NOT. linit(ig) ) THEN 
+               zsinlon(:,:,ig) = SIN( rad * glamf(:,:) )
+               zcoslon(:,:,ig) = COS( rad * glamf(:,:) )
+               zsinlat(:,:,ig) = SIN( rad * gphif(:,:) )
+               zcoslat(:,:,ig) = COS( rad * gphif(:,:) )
+               linit(ig) = .TRUE.
+            ENDIF
+         CASE default   
             WRITE(ctmp1,*) 'geo2oce : bad grid argument : ', cgrid
             CALL ctl_stop( ctmp1 )
-       END SELECT
-      
-      IF( .NOT. linit(ig) ) THEN 
-         zsinlon (:,:,ig) = SIN (rad * plon)
-         zcoslon (:,:,ig) = COS (rad * plon)
-         zsinlat (:,:,ig) = SIN (rad * plat)
-         zcoslat (:,:,ig) = COS (rad * plat)
-         linit (ig) = .TRUE.
-      ENDIF
-      
-      pte = - zsinlon (:,:,ig) * pxx + zcoslon (:,:,ig) * pyy
-      ptn = - zcoslon (:,:,ig) * zsinlat (:,:,ig) * pxx    &
-            - zsinlon (:,:,ig) * zsinlat (:,:,ig) * pyy    &
-            + zcoslat (:,:,ig) * pzz
-      ptv =   zcoslon (:,:,ig) * zcoslat (:,:,ig) * pxx    &
-            + zsinlon (:,:,ig) * zcoslat (:,:,ig) * pyy    &
-            + zsinlat (:,:,ig) * pzz
-
+      END SELECT
+      
+      pte = - zsinlon(:,:,ig) * pxx + zcoslon(:,:,ig) * pyy
+      ptn = - zcoslon(:,:,ig) * zsinlat(:,:,ig) * pxx    &
+            - zsinlon(:,:,ig) * zsinlat(:,:,ig) * pyy    &
+            + zcoslat(:,:,ig) * pzz
+!!$   ptv =   zcoslon(:,:,ig) * zcoslat(:,:,ig) * pxx    &
+!!$         + zsinlon(:,:,ig) * zcoslat(:,:,ig) * pyy    &
+!!$         + zsinlat(:,:,ig) * pzz
+      !
    END SUBROUTINE geo2oce
+
+   SUBROUTINE oce2geo ( pte, ptn, cgrid,     &
+                        pxx , pyy , pzz )
+      !!----------------------------------------------------------------------
+      !!                    ***  ROUTINE oce2geo  ***
+      !!      
+      !! ** Purpose :
+      !!
+      !! ** Method  :   Change vector from east/north to geocentric
+      !!
+      !! History :
+      !!        !         (A. Caubel)  oce2geo - Original code
+      !!----------------------------------------------------------------------
+      REAL(wp), DIMENSION(jpi,jpj), INTENT( IN    ) ::  pte, ptn
+      CHARACTER(len=1)            , INTENT( IN    ) ::  cgrid
+      REAL(wp), DIMENSION(jpi,jpj), INTENT(   OUT ) ::  pxx , pyy , pzz
+      !!
+      REAL(wp), PARAMETER :: rpi = 3.141592653E0
+      REAL(wp), PARAMETER :: rad = rpi / 180.e0
+      INTEGER ::   ig     !
+      !! * Local save
+      REAL(wp), SAVE, DIMENSION(jpi,jpj,4) ::   zsinlon, zcoslon, zsinlat, zcoslat
+      LOGICAL , SAVE, DIMENSION(4)         ::   linit = .FALSE.
+      !!----------------------------------------------------------------------
+
+      SELECT CASE( cgrid)
+         CASE ( 'T' )   
+            ig = 1
+            IF( .NOT. linit(ig) ) THEN 
+               zsinlon(:,:,ig) = SIN( rad * glamt(:,:) )
+               zcoslon(:,:,ig) = COS( rad * glamt(:,:) )
+               zsinlat(:,:,ig) = SIN( rad * gphit(:,:) )
+               zcoslat(:,:,ig) = COS( rad * gphit(:,:) )
+               linit(ig) = .TRUE.
+            ENDIF
+         CASE ( 'U' )   
+            ig = 2
+            IF( .NOT. linit(ig) ) THEN 
+               zsinlon(:,:,ig) = SIN( rad * glamu(:,:) )
+               zcoslon(:,:,ig) = COS( rad * glamu(:,:) )
+               zsinlat(:,:,ig) = SIN( rad * gphiu(:,:) )
+               zcoslat(:,:,ig) = COS( rad * gphiu(:,:) )
+               linit(ig) = .TRUE.
+            ENDIF
+         CASE ( 'V' )   
+            ig = 3
+            IF( .NOT. linit(ig) ) THEN 
+               zsinlon(:,:,ig) = SIN( rad * glamv(:,:) )
+               zcoslon(:,:,ig) = COS( rad * glamv(:,:) )
+               zsinlat(:,:,ig) = SIN( rad * gphiv(:,:) )
+               zcoslat(:,:,ig) = COS( rad * gphiv(:,:) )
+               linit(ig) = .TRUE.
+            ENDIF
+         CASE ( 'F' )   
+            ig = 4
+            IF( .NOT. linit(ig) ) THEN 
+               zsinlon(:,:,ig) = SIN( rad * glamf(:,:) )
+               zcoslon(:,:,ig) = COS( rad * glamf(:,:) )
+               zsinlat(:,:,ig) = SIN( rad * gphif(:,:) )
+               zcoslat(:,:,ig) = COS( rad * gphif(:,:) )
+               linit(ig) = .TRUE.
+            ENDIF
+         CASE default   
+            WRITE(ctmp1,*) 'geo2oce : bad grid argument : ', cgrid
+            CALL ctl_stop( ctmp1 )
+      END SELECT
+
+       pxx = - zsinlon(:,:,ig) * pte - zcoslon(:,:,ig) * zsinlat(:,:,ig) * ptn 
+       pyy =   zcoslon(:,:,ig) * pte - zsinlon(:,:,ig) * zsinlat(:,:,ig) * ptn
+       pzz =   zcoslat(:,:,ig) * ptn
+
+      
+   END SUBROUTINE oce2geo
 
 
@@ -446,4 +523,41 @@
    END SUBROUTINE repere
 
+   SUBROUTINE obs_rot ( psinu, pcosu, psinv, pcosv )
+      !!----------------------------------------------------------------------
+      !!                  ***  ROUTINE obs_rot  ***
+      !!
+      !! ** Purpose :   Copy gsinu, gcosu, gsinv and gsinv 
+      !!                to input data for rotations of
+      !!                current at observation points
+      !!
+      !! History :
+      !!   9.2  !  09-02  (K. Mogensen)
+      !!----------------------------------------------------------------------
+      REAL(wp), DIMENSION(jpi,jpj), INTENT( OUT )::   &
+         & psinu, pcosu, psinv, pcosv! copy of data
+
+      !!----------------------------------------------------------------------
+
+      ! Initialization of gsin* and gcos* at first call
+      ! -----------------------------------------------
+
+      IF( lmust_init ) THEN
+         IF(lwp) WRITE(numout,*)
+         IF(lwp) WRITE(numout,*) ' obs_rot : geographic <--> stretched'
+         IF(lwp) WRITE(numout,*) ' ~~~~~~~   coordinate transformation'
+
+         CALL angle       ! initialization of the transformation
+         lmust_init = .FALSE.
+
+      ENDIF
+      
+      psinu(:,:) = gsinu(:,:)
+      pcosu(:,:) = gcosu(:,:)
+      psinv(:,:) = gsinv(:,:)
+      pcosv(:,:) = gcosv(:,:)
+      
+   END SUBROUTINE obs_rot
+
+
   !!======================================================================
 END MODULE geo2ocean
Index: /branches/TAM_V3_0/NEMO/OPA_SRC/lib_mpp.F90
===================================================================
--- /branches/TAM_V3_0/NEMO/OPA_SRC/lib_mpp.F90	(revision 1883)
+++ /branches/TAM_V3_0/NEMO/OPA_SRC/lib_mpp.F90	(revision 1884)
@@ -110,5 +110,7 @@
    INTEGER ::   &
       mppsize,  &  ! number of process
-      mpprank,  &  ! process number  [ 0 - size-1 ]
+      mpprank      ! process number  [ 0 - size-1 ]
+
+   INTEGER, PUBLIC ::   &      
       mpi_comm_opa ! opa local communicator
 
@@ -122,5 +124,5 @@
       nrank_ice            ! dimension ndim_rank_north, number of the procs belonging to ncomm_north
    ! variables used in case of north fold condition in mpp_mpi with jpni > 1
-   INTEGER ::      &       !
+   INTEGER, PUBLIC ::   &    !
       ngrp_world,  &       ! group ID for the world processors
       ngrp_north,  &       ! group ID for the northern processors (to be fold)
@@ -128,11 +130,11 @@
       ndim_rank_north, &   ! number of 'sea' processor in the northern line (can be /= jpni !)
       njmppmax             ! value of njmpp for the processors of the northern line
-   INTEGER ::      &       !
+   INTEGER, PUBLIC ::      &       !
       north_root           ! number (in the comm_opa) of proc 0 in the northern comm
-   INTEGER, DIMENSION(:), ALLOCATABLE ::   &
+   INTEGER, PUBLIC, DIMENSION(:), ALLOCATABLE ::   &
       nrank_north          ! dimension ndim_rank_north, number of the procs belonging to ncomm_north
    CHARACTER (len=1) ::  &
       c_mpi_send = 'S'     ! type od mpi send/recieve (S=standard, B=bsend, I=isend)
-   LOGICAL  ::           &
+   LOGICAL, PUBLIC  ::           &
       l_isend = .FALSE.    ! isend use indicator (T if c_mpi_send='I')
    INTEGER ::            & ! size of the buffer in case of mpi_bsend 
Index: /branches/TAM_V3_0/NEMO/OPA_SRC/opa.F90
===================================================================
--- /branches/TAM_V3_0/NEMO/OPA_SRC/opa.F90	(revision 1883)
+++ /branches/TAM_V3_0/NEMO/OPA_SRC/opa.F90	(revision 1884)
@@ -67,4 +67,6 @@
    USE diaptr          ! poleward transports           (dia_ptr_init routine)
 
+   USE tamtrj          ! writing out state trajectory 
+
    USE step            ! OPA time-stepping                  (stp     routine)
 #if defined key_oasis3
@@ -302,4 +304,6 @@
       CALL dia_ptr_init                     ! Poleward TRansports initialization
 
+      CALL tam_trj_ini
+      IF(lwp) WRITE(numout,*)'Euler time step switch is ', neuler
       !                                     ! =============== !
       !                                     !  time stepping  !
Index: /branches/TAM_V3_0/NEMO/OPA_SRC/par_oce.F90
===================================================================
--- /branches/TAM_V3_0/NEMO/OPA_SRC/par_oce.F90	(revision 1883)
+++ /branches/TAM_V3_0/NEMO/OPA_SRC/par_oce.F90	(revision 1884)
@@ -38,5 +38,5 @@
       !                                !  ( <= jpni x jpnj )
 #endif
-
+ 
    INTEGER, PUBLIC, PARAMETER ::    &  !:
       jpr2di = 0,                   &  !: number of columns for extra outer halo 
@@ -58,5 +58,5 @@
 #elif defined key_orca_r2
    !!---------------------------------------------------------------------
-   !!   'key_orca_r2'   :                           global ocean : ORCA R4
+   !!   'key_orca_r2'   :                           global ocean : ORCA R2
    !!---------------------------------------------------------------------
 #             include "par_ORCA_R2.h90"
@@ -91,4 +91,9 @@
    !!---------------------------------------------------------------------
 #             include "par_GYRE.h90"
+#elif defined key_pomme_r025 
+   !!--------------------------------------------------------------------- 
+   !!   'key_pomme_r025':                        regional basin : POMME025 
+   !!--------------------------------------------------------------------- 
+#             include "par_POMME_R025.h90" 
 #else
    !!---------------------------------------------------------------------
Index: /branches/TAM_V3_0/NEMO/OPA_SRC/step.F90
===================================================================
--- /branches/TAM_V3_0/NEMO/OPA_SRC/step.F90	(revision 1883)
+++ /branches/TAM_V3_0/NEMO/OPA_SRC/step.F90	(revision 1884)
@@ -111,4 +111,6 @@
    USE floats          ! floats computation               (flo_stp routine)
 
+   USE tamtrj          ! writing out state trajectory    
+
    USE stpctl          ! time stepping control            (stp_ctl routine)
    USE restart         ! ocean restart                    (rst_wri routine)
@@ -163,4 +165,5 @@
       INTEGER, INTENT(in) ::   kstp   ! ocean time-step index
 #endif      
+      REAL(wp), DIMENSION(:,:,:), ALLOCATABLE :: zta_tmp, zsa_tmp
       INTEGER ::   jk       ! dummy loop indice
       INTEGER ::   indic    ! error indicator if < 0
@@ -262,4 +265,8 @@
                              ta(:,:,:) = 0.e0               ! set tracer trends to zero
                              sa(:,:,:) = 0.e0
+
+      ! Saving non-linear trajectory at restart state
+      ! May not be exact for sbc and zdf parameters
+      IF( ( ln_trjwri ) .AND. ( kstp == nit000 ) ) CALL tam_trj_wri( kstp - 1 )
 
                              CALL tra_sbc    ( kstp )       ! surface boundary condition
@@ -293,4 +300,14 @@
 
       !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
+      ! saving ta and sa (temporary fix, please do not remove)
+      !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
+      IF (ln_trjwri) THEN
+                               ALLOCATE ( zta_tmp(jpi,jpj,jpk), &
+            &                             zsa_tmp(jpi,jpj,jpk)  )
+                               zta_tmp(:,:,:) = ta(:,:,:)
+                               zsa_tmp(:,:,:) = sa(:,:,:)
+      END IF
+
+      !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
       ! Dynamics
       !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
@@ -353,6 +370,27 @@
          IF( lk_diafwb  )   CALL dia_fwb( kstp )                 ! Fresh water budget diagnostics
          IF( ln_diaptr  )   CALL dia_ptr( kstp )                 ! Poleward TRansports diagnostics
-         !                                                 ! outputs
-                            CALL dia_wri( kstp, indic )          ! ocean model: outputs
+
+         !                                                 ! Outputs
+ 
+
+      !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
+      ! restoring ta and sa (temporary fix, please do not remove)
+      !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
+         IF (ln_trjwri) THEN
+            ta(:,:,:) = zta_tmp(:,:,:)
+            sa(:,:,:) = zsa_tmp(:,:,:)
+            DEALLOCATE ( zta_tmp, &
+               &         zsa_tmp  )
+         END IF
+
+         !                                                 ! Outputs
+                            CALL dia_wri    ( kstp, indic )      ! ocean model: outputs
+
+      !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
+      ! Assimilation mode
+      !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
+
+         IF( ln_trjwri ) CALL tam_trj_wri( kstp )          ! Output trajectory fields
+
       ENDIF
 
