Index: LMDZ5/branches/testing/libf/phymar/iophys.F90
===================================================================
--- LMDZ5/branches/testing/libf/phymar/iophys.F90	(revision 2435)
+++ 	(revision )
@@ -1,133 +1,0 @@
-      subroutine iophys_ecrit(nom,lllm,titre,unite,px)
-      USE dimphy
-      USE mod_phys_lmdz_para
-      USE mod_grid_phy_lmdz
-      IMPLICIT NONE
-
-
-
-!  Ecriture de variables diagnostiques au choix dans la physique 
-!  dans un fichier NetCDF nomme  'diagfi'. Ces variables peuvent etre
-!  3d (ex : temperature), 2d (ex : temperature de surface), ou
-!  0d (pour un scalaire qui ne depend que du temps : ex : la longitude
-!  solaire)
-!  (ou encore 1d, dans le cas de testphys1d, pour sortir une colonne)
-!  La periode d'ecriture est donnee par 
-!  "ecritphy " regle dans le fichier de controle de run :  run.def
-!
-!    writediagfi peut etre appele de n'importe quelle subroutine
-!    de la physique, plusieurs fois. L'initialisation et la creation du
-!    fichier se fait au tout premier appel.
-!
-! WARNING : les variables dynamique (u,v,t,q,ps)
-!  sauvees par writediagfi avec une
-! date donnee sont legerement differentes que dans le fichier histoire car 
-! on ne leur a pas encore ajoute de la dissipation et de la physique !!!
-! IL est  RECOMMANDE d'ajouter les tendance physique a ces variables
-! avant l'ecriture dans diagfi (cf. physiq.F)
-!  
-! Modifs: Aug.2010 Ehouarn: enforce outputs to be real*4
-!
-!  parametres (input) :
-!  ----------
-!      unit : unite logique du fichier de sortie (toujours la meme)
-!      nom  : nom de la variable a sortir (chaine de caracteres)
-!      titre: titre de la variable (chaine de caracteres)
-!      unite : unite de la variable (chaine de caracteres)
-!      px : variable a sortir (real 0, 1, 2, ou 3d)
-!
-!=================================================================
-
-#include "dimensions.h"
-#include "paramet.h"
-#include "netcdf.inc"
-#include "iotd.h"
-
-
-! Arguments on input:
-      integer lllm
-      character (len=*) :: nom,titre,unite
-      integer imjmax
-      parameter (imjmax=100000)
-      real px(klon_omp,lllm)
-      real xglo(klon_glo,lllm)
-      real zx(iim,jjp1,lllm)
-
-
-      CALL Gather(px,xglo)
-!$OMP MASTER
-      IF (is_mpi_root) THEN       
-        CALL Grid1Dto2D_glo(xglo,zx)
-        call iotd_ecrit(nom,lllm,titre,unite,zx)
-      ENDIF
-!$OMP END MASTER
-
-      return
-      end
-
-!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-      SUBROUTINE iophys_ini
-      USE mod_phys_lmdz_para
-
-      IMPLICIT NONE
-
-!=======================================================================
-!
-!   Auteur:  L. Fairhead  ,  P. Le Van, Y. Wanherdrick, F. Forget
-!   -------
-!
-!   Objet:
-!   ------
-!
-!   'Initialize' the diagfi.nc file: write down dimensions as well
-!   as time-independent fields (e.g: geopotential, mesh area, ...)
-!
-!=======================================================================
-!-----------------------------------------------------------------------
-!   Declarations:
-!   -------------
-
-#include "dimensions.h"
-#include "paramet.h"
-#include "comgeom.h"
-#include "comvert.h"
-
-real pi
-
-!   Arguments:
-!   ----------
-
-!$OMP MASTER
-    IF (is_mpi_root) THEN       
-pi=2.*asin(1.)
-call iotd_ini('phys.nc   ', &
-iim,jjp1,llm,rlonv(1:iim)*180./pi,rlatu*180./pi,presnivs)
-    ENDIF
-!$OMP END MASTER
-
-      END
-
-#ifdef und
-      SUBROUTINE gr_fi_ecrit(nfield,nlon,iim,jjmp1,fi,ecrit)
-      IMPLICIT none
-
-!=======================================================================
-      INTEGER nfield,nlon,iim,jjmp1, jjm
-      REAL fi(nlon,nfield), ecrit(iim*jjmp1,nfield)
-
-      INTEGER i, n, ig
-
-      jjm = jjmp1 - 1
-      DO n = 1, nfield
-         DO i=1,iim
-            ecrit(i,n) = fi(1,n)
-            ecrit(i+jjm*iim,n) = fi(nlon,n)
-         ENDDO
-         DO ig = 1, nlon - 2
-           ecrit(iim+ig,n) = fi(1+ig,n)
-         ENDDO
-      ENDDO
-      RETURN
-      END
-
-#endif
Index: LMDZ5/branches/testing/libf/phymar/physiq_mod.F90
===================================================================
--- LMDZ5/branches/testing/libf/phymar/physiq_mod.F90	(revision 2435)
+++ LMDZ5/branches/testing/libf/phymar/physiq_mod.F90	(revision 2641)
@@ -29,4 +29,5 @@
       USE mod_phys_lmdz_para, only : jj_nb
       USE phys_state_var_mod, only : phys_state_var_init
+      USE vertical_layers_mod, ONLY: ap, bp
 ! Modules LMDZ utilisés pour LMDZ-MAR:
       USE control_mod      
@@ -52,5 +53,4 @@
 #include "dimensions.h"
 ! Include LMDZ utilisés ici pour MAR-LMDZ:
-#include "comvert.h"
 #include "YOMCST.h"
 
Index: LMDZ5/branches/testing/libf/phymar/vertical_layers_mod.F90
===================================================================
--- LMDZ5/branches/testing/libf/phymar/vertical_layers_mod.F90	(revision 2641)
+++ LMDZ5/branches/testing/libf/phymar/vertical_layers_mod.F90	(revision 2641)
@@ -0,0 +1,46 @@
+! $Id: $
+
+MODULE vertical_layers_mod
+
+   REAL,SAVE             :: preff  ! reference surface pressure (Pa)
+   REAL,SAVE             :: scaleheight ! atmospheric reference scale height (km)
+   REAL,SAVE,ALLOCATABLE :: ap(:) ! hybrid (pressure contribution) coordinate 
+                                  ! at layer interfaces (Pa)
+   REAL,SAVE,ALLOCATABLE :: bp(:) ! hybrid (sigma contribution) coordinate 
+                                  ! at layer interfaces (Pa)
+   REAL,SAVE,ALLOCATABLE :: presnivs(:) ! reference pressure at mid-layer (Pa),
+                                        ! based on preff, ap and bp
+   REAL,SAVE,ALLOCATABLE :: pseudoalt(:) ! pseudo-altitude of model layers (km),
+                                         ! based on preff and scaleheight
+   
+!$OMP THREADPRIVATE(preff,scaleheight,ap,bp,presnivs,pseudoalt)
+
+
+CONTAINS
+
+  SUBROUTINE init_vertical_layers(nlayer,preff_,scaleheight_,ap_,bp_,&
+                                 presnivs_, pseudoalt_)
+    IMPLICIT NONE
+    INTEGER,INTENT(IN) :: nlayer ! number of atmospheric layers
+    REAL,INTENT(IN)    :: preff_ ! reference surface pressure (Pa)
+    REAL,INTENT(IN)    :: scaleheight_ ! atmospheric scale height (km)
+    REAL,INTENT(IN)    :: ap_(nlayer+1) ! hybrid coordinate at interfaces
+    REAL,INTENT(IN)    :: bp_(nlayer+1) ! hybrid coordinate at interfaces
+    REAL,INTENT(IN)    :: presnivs_(nlayer) ! Appproximative pressure of atm. layers (Pa)
+    REAL,INTENT(IN)    :: pseudoalt_(nlayer) ! pseudo-altitude of atm. layers (km)
+  
+    ALLOCATE(ap(nlayer+1))
+    ALLOCATE(bp(nlayer+1))
+    ALLOCATE(presnivs(nlayer))
+    ALLOCATE(pseudoalt(nlayer))
+  
+    preff = preff_
+    scaleheight=scaleheight_
+    ap(:) = ap_(:)
+    bp(:) = bp_(:)
+    presnivs(:) = presnivs_(:)
+    pseudoalt(:) = pseudoalt_(:)
+
+  END SUBROUTINE init_vertical_layers
+
+END MODULE vertical_layers_mod
