Index: trunk/LMDZ.TITAN/libf/phy_common/abort_physic.F90
===================================================================
--- trunk/LMDZ.TITAN/libf/phy_common/abort_physic.F90	(revision 1896)
+++ trunk/LMDZ.TITAN/libf/phy_common/abort_physic.F90	(revision 1896)
@@ -0,0 +1,50 @@
+! $Id: $
+      SUBROUTINE abort_physic(modname, message, ierr)
+     
+#ifdef CPP_IOIPSL
+      USE IOIPSL
+#else
+! if not using IOIPSL, we still need to use (a local version of) getin_dump
+      USE ioipsl_getincom
+#endif
+      USE mod_phys_lmdz_para
+      USE print_control_mod, ONLY: lunout
+      IMPLICIT NONE
+!
+! Stops the simulation cleanly, closing files and printing various
+! comments
+!
+!  Input: modname = name of calling program
+!         message = stuff to print
+!         ierr    = severity of situation ( = 0 normal )
+
+      character(len=*), intent(in):: modname
+      integer ierr, ierror_mpi
+      character(len=*), intent(in):: message
+
+      write(lunout,*) 'in abort_physic'
+#ifdef CPP_IOIPSL
+!$OMP MASTER
+      call histclo
+      call restclo
+      if (mpi_rank .eq. 0) then
+         call getin_dump
+      endif
+!$OMP END MASTER
+#endif
+
+      write(lunout,*) 'Stopping in ', modname
+      write(lunout,*) 'Reason = ',message
+      if (ierr .eq. 0) then
+        write(lunout,*) 'Everything is cool'
+      else
+        write(lunout,*) 'Houston, we have a problem, ierr = ', ierr
+#ifdef CPP_MPI
+!$OMP CRITICAL (MPI_ABORT_PHYSIC)
+        call MPI_ABORT(COMM_LMDZ_PHY, 1, ierror_mpi)
+!$OMP END CRITICAL (MPI_ABORT_PHYSIC)
+#else
+        stop 1
+#endif          
+      endif
+      END
Index: trunk/LMDZ.TITAN/libf/phy_common/geometry_mod.F90
===================================================================
--- trunk/LMDZ.TITAN/libf/phy_common/geometry_mod.F90	(revision 1644)
+++ trunk/LMDZ.TITAN/libf/phy_common/geometry_mod.F90	(revision 1896)
@@ -30,4 +30,6 @@
 !$OMP THREADPRIVATE(cell_area)
 
+  INTEGER,SAVE,ALLOCATABLE :: ind_cell_glo(:)      ! global index of a local cell
+!$OMP THREADPRIVATE(ind_cell_glo)
 
 CONTAINS
@@ -35,5 +37,5 @@
   SUBROUTINE init_geometry(klon,longitude_,latitude_, &
                            boundslon_,boundslat_, &
-                           cell_area_,dx_,dy_)
+                           cell_area_,ind_cell_glo_,dx_,dy_)
   USE mod_grid_phy_lmdz, ONLY: nvertex
   USE nrtype, ONLY : PI
@@ -45,4 +47,5 @@
     REAL,INTENT(IN) :: boundslat_(klon,nvertex)
     REAL,INTENT(IN) :: cell_area_(klon)
+    INTEGER,OPTIONAL,INTENT(IN) :: ind_cell_glo_(klon)
     REAL,OPTIONAL,INTENT(IN) :: dx_(klon)
     REAL,OPTIONAL,INTENT(IN) :: dy_(klon)
@@ -55,4 +58,5 @@
     ALLOCATE(boundslat(klon,nvertex))
     ALLOCATE(cell_area(klon))
+    IF (PRESENT(ind_cell_glo_)) ALLOCATE(ind_cell_glo(klon))
     IF (PRESENT(dx_)) ALLOCATE(dx(klon))
     IF (PRESENT(dy_))ALLOCATE(dy(klon))
@@ -65,4 +69,5 @@
     boundslat(:,:) = boundslat_(:,:)
     cell_area(:) = cell_area_(:)
+    IF (PRESENT(ind_cell_glo_)) ind_cell_glo(:) = ind_cell_glo_(:)
     IF (PRESENT(dx_)) dx(:) = dx_(:)
     IF (PRESENT(dy_)) dy(:) = dy_(:)
Index: trunk/LMDZ.TITAN/libf/phy_common/init_print_control_mod.F90
===================================================================
--- trunk/LMDZ.TITAN/libf/phy_common/init_print_control_mod.F90	(revision 1896)
+++ trunk/LMDZ.TITAN/libf/phy_common/init_print_control_mod.F90	(revision 1896)
@@ -0,0 +1,67 @@
+MODULE init_print_control_mod
+
+! init_print_control to initialize print_control_mod variables
+! not included there because of circular dependecy issues
+
+CONTAINS
+
+  SUBROUTINE init_print_control
+  USE print_control_mod, ONLY : set_print_control
+  USE ioipsl_getin_p_mod, ONLY : getin_p
+  USE mod_phys_lmdz_para, ONLY: is_omp_root, is_master
+  IMPLICIT NONE
+
+    INTEGER :: lunout ! default output file identifier (6==screen)
+    INTEGER :: prt_level ! Output level
+    LOGICAL :: debug ! flag to specify if in "debug mode"
+    LOGICAL :: opened
+    INTEGER :: number
+    
+    !Config  Key  = prt_level
+    !Config  Desc = niveau d'impressions de débogage
+    !Config  Def  = 0
+    !Config  Help = Niveau d'impression pour le débogage
+    !Config         (0 = minimum d'impression)
+    prt_level = 0
+    CALL getin_p('prt_level',prt_level)
+
+    !Config  Key  = lunout
+    !Config  Desc = unite de fichier pour les impressions
+    !Config  Def  = 6
+    !Config  Help = unite de fichier pour les impressions 
+    !Config         (defaut sortie standard = 6)
+    lunout=6
+    CALL getin_p('lunout', lunout)
+
+    IF (is_omp_root) THEN
+      IF (lunout /= 5 .and. lunout /= 6) THEN
+         INQUIRE(FILE='lmdz.out_0000',OPENED=opened,NUMBER=number)
+         IF (opened) THEN
+           lunout=number
+         ELSE
+           OPEN(UNIT=lunout,FILE='lmdz.out_0000',ACTION='write',  &
+                STATUS='unknown',FORM='formatted')
+         ENDIF
+      ENDIF
+    ENDIF
+
+    !Config  Key  = debug
+    !Config  Desc = mode debogage
+    !Config  Def  = false
+    !Config  Help = positionne le mode debogage
+
+    debug = .FALSE.
+    CALL getin_p('debug',debug)
+    
+    IF (is_master) THEN
+      WRITE(lunout,*)"init_print_control: prt_level=",prt_level
+      WRITE(lunout,*)"init_print_control: lunout=",lunout
+      WRITE(lunout,*)"init_print_control: debug=",debug      
+    ENDIF
+    
+    CALL set_print_control(lunout,prt_level,debug)
+
+  END SUBROUTINE init_print_control  
+
+END MODULE init_print_control_mod
+
Index: trunk/LMDZ.TITAN/libf/phy_common/mod_phys_lmdz_mpi_data.F90
===================================================================
--- trunk/LMDZ.TITAN/libf/phy_common/mod_phys_lmdz_mpi_data.F90	(revision 1644)
+++ trunk/LMDZ.TITAN/libf/phy_common/mod_phys_lmdz_mpi_data.F90	(revision 1896)
@@ -1,7 +1,6 @@
 !
-!$Header$
+!$Id$
 !
 MODULE mod_phys_lmdz_mpi_data
-!  USE mod_const_mpi
   
   INTEGER,SAVE :: ii_begin
@@ -36,11 +35,10 @@
   INTEGER,SAVE :: mpi_size
   INTEGER,SAVE :: mpi_master
-!  INTEGER,SAVE :: mpi_root
   LOGICAL,SAVE :: is_mpi_root
   LOGICAL,SAVE :: is_using_mpi
   
   
-  LOGICAL,SAVE :: is_north_pole
-  LOGICAL,SAVE :: is_south_pole
+  LOGICAL,SAVE :: is_north_pole_dyn
+  LOGICAL,SAVE :: is_south_pole_dyn
   INTEGER,SAVE :: COMM_LMDZ_PHY
   INTEGER,SAVE :: MPI_REAL_LMDZ   ! MPI_REAL8
@@ -48,15 +46,13 @@
 CONTAINS
   
-!  SUBROUTINE Init_phys_lmdz_mpi_data(iim,jjp1,nb_proc,distrib)
   SUBROUTINE init_phys_lmdz_mpi_data(nbp, nbp_lon, nbp_lat, communicator)
-!  USE mod_const_mpi, ONLY : COMM_LMDZ
   IMPLICIT NONE
 #ifdef CPP_MPI
     INCLUDE 'mpif.h'
 #endif
-    INTEGER,INTENT(in) :: nbp
-    INTEGER,INTENT(in) :: nbp_lon
-    INTEGER,INTENT(in) :: nbp_lat
-    INTEGER,INTENT(in) :: communicator
+    INTEGER,INTENT(IN) :: nbp
+    INTEGER,INTENT(IN) :: nbp_lon
+    INTEGER,INTENT(IN) :: nbp_lat
+    INTEGER,INTENT(IN) :: communicator
     
     INTEGER,ALLOCATABLE :: distrib(:)
@@ -109,13 +105,13 @@
     
     IF (mpi_rank == 0) THEN 
-      is_north_pole = .TRUE.
-    ELSE
-      is_north_pole = .FALSE.
+      is_north_pole_dyn = .TRUE.
+    ELSE
+      is_north_pole_dyn = .FALSE.
     ENDIF
     
     IF (mpi_rank == mpi_size-1) THEN
-      is_south_pole = .TRUE.
-    ELSE
-      is_south_pole = .FALSE.
+      is_south_pole_dyn = .TRUE.
+    ELSE
+      is_south_pole_dyn = .FALSE.
     ENDIF
     
@@ -187,7 +183,6 @@
 
   SUBROUTINE print_module_data
-!  USE print_control_mod, ONLY: lunout
+  USE print_control_mod, ONLY: lunout
   IMPLICIT NONE
-  INCLUDE "iniprint.h" 
   
     WRITE(lunout,*) 'ii_begin =', ii_begin
@@ -217,6 +212,6 @@
     WRITE(lunout,*) 'mpi_master =', mpi_master
     WRITE(lunout,*) 'is_mpi_root =', is_mpi_root
-    WRITE(lunout,*) 'is_north_pole =', is_north_pole
-    WRITE(lunout,*) 'is_south_pole =', is_south_pole
+    WRITE(lunout,*) 'is_north_pole_dyn =', is_north_pole_dyn
+    WRITE(lunout,*) 'is_south_pole_dyn =', is_south_pole_dyn
     WRITE(lunout,*) 'COMM_LMDZ_PHY =', COMM_LMDZ_PHY
   
Index: trunk/LMDZ.TITAN/libf/phy_common/mod_phys_lmdz_mpi_transfert.F90
===================================================================
--- trunk/LMDZ.TITAN/libf/phy_common/mod_phys_lmdz_mpi_transfert.F90	(revision 1644)
+++ trunk/LMDZ.TITAN/libf/phy_common/mod_phys_lmdz_mpi_transfert.F90	(revision 1896)
@@ -1,4 +1,4 @@
 !
-!$Header$
+!$Id$
 !
 MODULE mod_phys_lmdz_mpi_transfert
@@ -1693,5 +1693,5 @@
     
     offset=ii_begin
-    IF (is_north_pole) Offset=nbp_lon
+    IF (is_north_pole_dyn) Offset=nbp_lon
     
     
@@ -1703,5 +1703,5 @@
     
     
-    IF (is_north_pole) THEN 
+    IF (is_north_pole_dyn) THEN 
       DO i=1,dimsize
         DO ij=1,nbp_lon
@@ -1711,5 +1711,5 @@
     ENDIF
     
-    IF (is_south_pole) THEN 
+    IF (is_south_pole_dyn) THEN 
       DO i=1,dimsize
         DO ij=nbp_lon*(jj_nb-1)+1,nbp_lon*jj_nb
@@ -1737,5 +1737,5 @@
     
     offset=ii_begin
-    IF (is_north_pole) Offset=nbp_lon
+    IF (is_north_pole_dyn) Offset=nbp_lon
     
     
@@ -1747,5 +1747,5 @@
     
     
-    IF (is_north_pole) THEN 
+    IF (is_north_pole_dyn) THEN 
       DO i=1,dimsize
         DO ij=1,nbp_lon
@@ -1755,5 +1755,5 @@
     ENDIF
     
-    IF (is_south_pole) THEN 
+    IF (is_south_pole_dyn) THEN 
       DO i=1,dimsize
         DO ij=nbp_lon*(jj_nb-1)+1,nbp_lon*jj_nb
@@ -1782,5 +1782,5 @@
     
     offset=ii_begin
-    IF (is_north_pole) Offset=nbp_lon
+    IF (is_north_pole_dyn) Offset=nbp_lon
     
     
@@ -1792,5 +1792,5 @@
     
     
-    IF (is_north_pole) THEN 
+    IF (is_north_pole_dyn) THEN 
       DO i=1,dimsize
         DO ij=1,nbp_lon
@@ -1800,5 +1800,5 @@
     ENDIF
     
-    IF (is_south_pole) THEN 
+    IF (is_south_pole_dyn) THEN 
       DO i=1,dimsize
         DO ij=nbp_lon*(jj_nb-1)+1,nbp_lon*jj_nb
@@ -1824,5 +1824,5 @@
 
     offset=ii_begin
-    IF (is_north_pole) offset=nbp_lon
+    IF (is_north_pole_dyn) offset=nbp_lon
 
     DO i=1,dimsize
@@ -1832,5 +1832,5 @@
     ENDDO
 
-    IF (is_north_pole) THEN 
+    IF (is_north_pole_dyn) THEN 
       DO i=1,dimsize
         VarOut(1,i)=VarIn(1,i)
@@ -1854,5 +1854,5 @@
 
     offset=ii_begin
-    IF (is_north_pole) offset=nbp_lon
+    IF (is_north_pole_dyn) offset=nbp_lon
 
     DO i=1,dimsize
@@ -1862,5 +1862,5 @@
     ENDDO
 
-    IF (is_north_pole) THEN 
+    IF (is_north_pole_dyn) THEN 
       DO i=1,dimsize
          VarOut(1,i)=VarIn(1,i)
@@ -1883,5 +1883,5 @@
 
     offset=ii_begin
-    IF (is_north_pole) offset=nbp_lon
+    IF (is_north_pole_dyn) offset=nbp_lon
 
     DO i=1,dimsize
@@ -1891,5 +1891,5 @@
     ENDDO
 
-    IF (is_north_pole) THEN 
+    IF (is_north_pole_dyn) THEN 
       DO i=1,dimsize
         VarOut(1,i)=VarIn(1,i)
Index: trunk/LMDZ.TITAN/libf/phy_common/mod_phys_lmdz_omp_data.F90
===================================================================
--- trunk/LMDZ.TITAN/libf/phy_common/mod_phys_lmdz_omp_data.F90	(revision 1644)
+++ trunk/LMDZ.TITAN/libf/phy_common/mod_phys_lmdz_omp_data.F90	(revision 1896)
@@ -1,4 +1,4 @@
 !
-!$Id: mod_phys_lmdz_omp_data.F90 2326 2015-07-10 12:24:29Z emillour $
+!$Id: mod_phys_lmdz_omp_data.F90 2429 2016-01-27 12:43:09Z fairhead $
 !
 MODULE mod_phys_lmdz_omp_data
@@ -7,5 +7,7 @@
   INTEGER,SAVE :: omp_rank
   LOGICAL,SAVE :: is_omp_root
+  LOGICAL,SAVE :: is_omp_master  ! alias of is_omp_root
   LOGICAL,SAVE :: is_using_omp
+  LOGICAL,SAVE :: is_north_pole_phy, is_south_pole_phy
   
   INTEGER,SAVE,DIMENSION(:),ALLOCATABLE :: klon_omp_para_nb
@@ -16,10 +18,12 @@
   INTEGER,SAVE :: klon_omp_begin
   INTEGER,SAVE :: klon_omp_end
-!$OMP  THREADPRIVATE(omp_rank,klon_omp,is_omp_root,klon_omp_begin,klon_omp_end)
+!$OMP  THREADPRIVATE(omp_rank,klon_omp,is_omp_root,is_omp_master,klon_omp_begin,klon_omp_end)
+!$OMP  THREADPRIVATE(is_north_pole_phy, is_south_pole_phy)
 
 CONTAINS
   
   SUBROUTINE Init_phys_lmdz_omp_data(klon_mpi)
-    USE dimphy
+    USE dimphy 
+    USE mod_phys_lmdz_mpi_data, ONLY : is_north_pole_dyn, is_south_pole_dyn
     IMPLICIT NONE
     INTEGER, INTENT(in) :: klon_mpi
@@ -43,4 +47,5 @@
         omp_size=OMP_GET_NUM_THREADS()
 !$OMP END MASTER
+!$OMP BARRIER
         omp_rank=OMP_GET_THREAD_NUM()    
 #else    
@@ -56,10 +61,11 @@
    ELSE
      abort_message = 'ANORMAL : OMP_MASTER /= 0'
-     CALL abort_gcm (modname,abort_message,1)
+     CALL abort_physic (modname,abort_message,1)
    ENDIF
 !$OMP END MASTER
-
+   is_omp_master=is_omp_root
 
 !$OMP MASTER 
+
     ALLOCATE(klon_omp_para_nb(0:omp_size-1))
     ALLOCATE(klon_omp_para_begin(0:omp_size-1))
@@ -80,4 +86,15 @@
 !$OMP END MASTER
 !$OMP BARRIER
+
+   if ((is_north_pole_dyn) .AND. (omp_rank == 0 )) then
+      is_north_pole_phy = .TRUE.
+    else
+      is_north_pole_phy = .FALSE.
+    endif
+    if ((is_south_pole_dyn) .AND. (omp_rank == omp_size-1)) then
+      is_south_pole_phy = .TRUE.
+    else
+      is_south_pole_phy = .FALSE.
+    endif
    
     klon_omp=klon_omp_para_nb(omp_rank)
@@ -90,6 +107,6 @@
 
   SUBROUTINE Print_module_data
+  USE print_control_mod, ONLY: lunout
   IMPLICIT NONE
-  INCLUDE "iniprint.h"
 
 !$OMP CRITICAL  
Index: trunk/LMDZ.TITAN/libf/phy_common/physics_distribution_mod.F90
===================================================================
--- trunk/LMDZ.TITAN/libf/phy_common/physics_distribution_mod.F90	(revision 1644)
+++ trunk/LMDZ.TITAN/libf/phy_common/physics_distribution_mod.F90	(revision 1896)
@@ -10,6 +10,8 @@
                                        nbp, nbp_lon, nbp_lat, nbp_lev, &
                                        communicator)
-  USE mod_phys_lmdz_para, ONLY: init_phys_lmdz_para
+  USE mod_phys_lmdz_para, ONLY: init_phys_lmdz_para, klon_omp
   USE mod_grid_phy_lmdz, ONLY: init_grid_phy_lmdz
+  USE dimphy, ONLY : Init_dimphy
+
   IMPLICIT NONE
     INTEGER,INTENT(IN) :: grid_type 
@@ -24,4 +26,7 @@
     CALL init_grid_phy_lmdz(grid_type,nvertex, nbp_lon,nbp_lat,nbp_lev)
     CALL init_phys_lmdz_para(nbp,nbp_lon, nbp_lat, communicator)
+!$OMP PARALLEL
+    CALL init_dimphy(klon_omp,nbp_lev)
+!$OMP END PARALLEL
 
   END SUBROUTINE init_physics_distribution  
Index: trunk/LMDZ.TITAN/libf/phy_common/print_control_mod.F90
===================================================================
--- trunk/LMDZ.TITAN/libf/phy_common/print_control_mod.F90	(revision 1896)
+++ trunk/LMDZ.TITAN/libf/phy_common/print_control_mod.F90	(revision 1896)
@@ -0,0 +1,27 @@
+! $Id: $
+MODULE print_control_mod
+
+  INTEGER,SAVE :: lunout ! default output file identifier (6==screen)
+  INTEGER,SAVE :: prt_level ! debug output level
+  LOGICAL,SAVE :: debug ! flag to specify if in "debug mode"
+!$OMP THREADPRIVATE(lunout,prt_level,debug)
+
+  ! NB: Module variable Initializations done by set_print_control
+  !     routine from init_print_control_mod to avoid circular
+  !     module dependencies
+
+CONTAINS
+
+  SUBROUTINE set_print_control(lunout_,prt_level_,debug_)
+  IMPLICIT NONE
+    INTEGER :: lunout_
+    INTEGER :: prt_level_
+    LOGICAL :: debug_
+      
+    lunout = lunout_
+    prt_level = prt_level_
+    debug = debug_
+    
+  END SUBROUTINE set_print_control
+
+END MODULE print_control_mod
