Index: /vendors/XMLIO_SERVER/current/arch/arch-IA64_PLATINE.fcm
===================================================================
--- /vendors/XMLIO_SERVER/current/arch/arch-IA64_PLATINE.fcm	(revision 1897)
+++ /vendors/XMLIO_SERVER/current/arch/arch-IA64_PLATINE.fcm	(revision 1897)
@@ -0,0 +1,15 @@
+%COMPILER            mpif90
+%LINKER              mpif90
+%AR                  ar
+%MAKE                gmake
+%FPP_FLAGS           -P -traditional 
+%FPP_DEF             _NONE_
+%BASE_FFLAGS         -i4 -r8 -automatic -align all -I/opt/mpi/current/include
+%PROD_FFLAGS         -O3
+%DEV_FFLAGS          -O3 -traceback
+%DEBUG_FFLAGS        -g -traceback
+%MPI_FFLAGS
+%OMP_FFLAGS          -openmp
+%BASE_LD              -r8 -automatic
+%MPI_LD
+%OMP_LD              -openmp
Index: /vendors/XMLIO_SERVER/current/arch/arch-IA64_PLATINE.path
===================================================================
--- /vendors/XMLIO_SERVER/current/arch/arch-IA64_PLATINE.path	(revision 1897)
+++ /vendors/XMLIO_SERVER/current/arch/arch-IA64_PLATINE.path	(revision 1897)
@@ -0,0 +1,20 @@
+set NETCDF_INCDIR="-I/usr/include"
+set NETCDF_LIBDIR="-L/usr/lib"
+set NETCDF_LIB="-lnetcdff -lnetcdf"
+set IOIPSL_INCDIR="-I$PWD/../../lib"
+set IOIPSL_LIBDIR="-L$PWD/../../lib"
+set IOIPSL_LIB="-lioipsl"
+
+set XMLF90_INCDIR="-I$PWD/../XMLF90/inc"
+set XMLF90_LIBDIR="-L$PWD/../XMLF90/lib"
+set XMLF90_LIB="-lxmlf90"
+
+set OASIS_INCDIR="-I$PWD/../../prism/IA64/build/lib/psmile.MPI1"
+set OASIS_LIBDIR="-L$PWD/../../prism/IA64/lib"
+set OASIS_LIB="-lpsmile.MPI1 -lmpp_io"
+
+set VAMPIR_INCDIR="-I/applications/intel/ict/3.0/itac/7.0/include"
+set VAMPIR_LIBDIR="-L/applications/intel/ict/3.0/itac/7.0/lib" 
+set VAMPIR_LIB="-lVT -lvtunwind -ldwarf -lelf -lpthread"
+
+
Index: /vendors/XMLIO_SERVER/current/arch/arch-PW6_VARGAS.fcm
===================================================================
--- /vendors/XMLIO_SERVER/current/arch/arch-PW6_VARGAS.fcm	(revision 1897)
+++ /vendors/XMLIO_SERVER/current/arch/arch-PW6_VARGAS.fcm	(revision 1897)
@@ -0,0 +1,15 @@
+%COMPILER            xlf_r
+%LINKER              mpxlf_r
+%AR                  ar
+%MAKE                gmake
+%FPP_FLAGS           -P
+%FPP_DEF             _NONE_
+%BASE_FFLAGS         -qautodbl=dbl4
+%PROD_FFLAGS         -O3
+%DEV_FFLAGS          -O2 -qfullpath -qinitauto=7FBFFFFF -qfloat=nans -qflttrap=overflow:zerodivide:invalid:enable -qsigtrap
+%DEBUG_FFLAGS        -g -qfullpath -qnooptimize -qinitauto=7FBFFFFF  -qfloat=nans -qflttrap=overflow:zerodivide:invalid:enable -qsigtrap
+%MPI_FFLAGS          -I/usr/lpp/ppe.poe/include/thread64
+%OMP_FFLAGS          
+%BASE_LD              
+%MPI_LD
+%OMP_LD              
Index: /vendors/XMLIO_SERVER/current/arch/arch-PW6_VARGAS.path
===================================================================
--- /vendors/XMLIO_SERVER/current/arch/arch-PW6_VARGAS.path	(revision 1897)
+++ /vendors/XMLIO_SERVER/current/arch/arch-PW6_VARGAS.path	(revision 1897)
@@ -0,0 +1,21 @@
+set NETCDF_LIBDIR=" "
+set NETCDF_INCDIR=" "
+set NETCDF_LIB=" "
+
+set IOIPSL_INCDIR="-I$PWD/../../lib"
+set IOIPSL_LIBDIR="-L$PWD/../../lib"
+set IOIPSL_LIB="-lioipsl"
+
+set XMLF90_INCDIR="-I$PWD/../XMLF90/inc"
+set XMLF90_LIBDIR="-L$PWD/../XMLF90/lib"
+set XMLF90_LIB="-lxmlf90"
+
+set OASIS_INCDIR="-I$PWD/../../prism/AIX6/build/lib/psmile.MPI1"
+set OASIS_LIBDIR="-L$PWD/../../prism/AIX6/lib"
+set OASIS_LIB="-lpsmile.MPI1 -lmpp_io"
+
+set VAMPIR_INCDIR=
+set VAMPIR_LIBDIR=
+set VAMPIR_LIB=
+
+
Index: /vendors/XMLIO_SERVER/current/arch/arch-SX8_BRODIE.fcm
===================================================================
--- /vendors/XMLIO_SERVER/current/arch/arch-SX8_BRODIE.fcm	(revision 1897)
+++ /vendors/XMLIO_SERVER/current/arch/arch-SX8_BRODIE.fcm	(revision 1897)
@@ -0,0 +1,15 @@
+%COMPILER            sxmpif90
+%LINKER              sxmpif90
+%AR                  sxar
+%MAKE                make
+%FPP_FLAGS           -P -traditional 
+%FPP_DEF             _NONE_
+%BASE_FFLAGS         -P stack -Wf,-pvctl res=whole,-A idbl4,-ptr byte -EP -R5 -float0 -size_t64 -dw -Wf,"-pvctl loopcnt=999999 fullmsg noassume"
+%PROD_FFLAGS         -C vopt
+%DEV_FFLAGS          -C vsafe -gv -Wf,-init stack=nan,-init heap=nan
+%DEBUG_FFLAGS        -C debug -eC -Wf,-init stack=nan,-init heap=nan
+%MPI_FFLAGS
+%OMP_FFLAGS          -P openmp 
+%BASE_LD             
+%MPI_LD
+%OMP_LD              -P openmp
Index: /vendors/XMLIO_SERVER/current/arch/arch-SX8_BRODIE.path
===================================================================
--- /vendors/XMLIO_SERVER/current/arch/arch-SX8_BRODIE.path	(revision 1897)
+++ /vendors/XMLIO_SERVER/current/arch/arch-SX8_BRODIE.path	(revision 1897)
@@ -0,0 +1,12 @@
+set NETCDF_LIBDIR="-L/SXlocal/pub/netCDF/netCDF-3.6.1/lib"
+set NETCDF_INCDIR="-I/SXlocal/pub/netCDF/netCDF-3.6.1/include"
+set NETCDF_LIB="-lnetcdf"
+set IOIPSL_INCDIR="-I$PWD/../../lib"
+set IOIPSL_LIBDIR="-L$PWD/../../lib"
+set IOIPSL_LIB="-lioipsl"
+set XMLF90_INCDIR="-I$PWD/../XMLF90/inc"
+set XMLF90_LIBDIR="-L$PWD/../XMLF90/lib"
+set XMLF90_LIB="-lxmlf90"
+set OASIS_INCDIR="-I$PWD/../../prism/SX/build/lib/psmile.MPI1"
+set OASIS_LIBDIR="-L$PWD/../../prism/SX/lib"
+set OASIS_LIB="-lpsmile.MPI1 -lmpp_io"
Index: /vendors/XMLIO_SERVER/current/arch/arch-SX8_MERCURE.fcm
===================================================================
--- /vendors/XMLIO_SERVER/current/arch/arch-SX8_MERCURE.fcm	(revision 1897)
+++ /vendors/XMLIO_SERVER/current/arch/arch-SX8_MERCURE.fcm	(revision 1897)
@@ -0,0 +1,15 @@
+%COMPILER            sxmpif90
+%LINKER              sxmpif90
+%AR                  sxar
+%MAKE                make
+%FPP_FLAGS           -P -traditional 
+%FPP_DEF             _NONE_
+%BASE_FFLAGS         -P stack -Wf,-pvctl res=whole,-A idbl4,-ptr byte -EP -R5 -float0 -size_t64 -dw -Wf,"-pvctl loopcnt=999999 fullmsg noassume"
+%PROD_FFLAGS         -C vopt
+%DEV_FFLAGS          -C vsafe -gv -Wf,-init stack=nan,-init heap=nan
+%DEBUG_FFLAGS        -C debug -eC -Wf,-init stack=nan,-init heap=nan
+%MPI_FFLAGS
+%OMP_FFLAGS          -P openmp 
+%BASE_LD             -size_t64
+%MPI_LD
+%OMP_LD              -P openmp
Index: /vendors/XMLIO_SERVER/current/arch/arch-SX8_MERCURE.path
===================================================================
--- /vendors/XMLIO_SERVER/current/arch/arch-SX8_MERCURE.path	(revision 1897)
+++ /vendors/XMLIO_SERVER/current/arch/arch-SX8_MERCURE.path	(revision 1897)
@@ -0,0 +1,12 @@
+set NETCDF_LIBDIR="-L/usr/local/SX8/soft/netcdf/lib"
+set NETCDF_INCDIR="-I/usr/local/SX8/soft/netcdf/include"
+set NETCDF_LIB="-lnetcdf"
+set IOIPSL_INCDIR="-I$PWD/../../lib"
+set IOIPSL_LIBDIR="-L$PWD/../../lib"
+set IOIPSL_LIB="-lioipsl"
+set XMLF90_INCDIR="-I$PWD/../XMLF90/inc"
+set XMLF90_LIBDIR="-L$PWD/../XMLF90/lib"
+set XMLF90_LIB="-lxmlf90"
+set OASIS_INCDIR="-I$PWD/../../prism/SX/build/lib/psmile.MPI1"
+set OASIS_LIBDIR="-L$PWD/../../prism/SX/lib"
+set OASIS_LIB="-lpsmile.MPI1 -lmpp_io"
Index: /vendors/XMLIO_SERVER/current/arch/arch-SX9_MERCURE.fcm
===================================================================
--- /vendors/XMLIO_SERVER/current/arch/arch-SX9_MERCURE.fcm	(revision 1897)
+++ /vendors/XMLIO_SERVER/current/arch/arch-SX9_MERCURE.fcm	(revision 1897)
@@ -0,0 +1,15 @@
+%COMPILER            sxmpif90
+%LINKER              sxmpif90
+%AR                  sxar
+%MAKE                make
+%FPP_FLAGS           -P -traditional 
+%FPP_DEF             _NONE_
+%BASE_FFLAGS         -P stack -Wf,-pvctl res=whole,-A idbl4,-ptr byte -EP -R5 -float0 -size_t64 -dw -Wf,"-pvctl loopcnt=999999 fullmsg noassume"
+%PROD_FFLAGS         -C vopt
+%DEV_FFLAGS          -C vsafe -gv -Wf,-init stack=nan,-init heap=nan
+%DEBUG_FFLAGS        -C debug -eC -Wf,-init stack=nan,-init heap=nan
+%MPI_FFLAGS
+%OMP_FFLAGS          -P openmp 
+%BASE_LD             -size_t64
+%MPI_LD
+%OMP_LD              -P openmp
Index: /vendors/XMLIO_SERVER/current/arch/arch-SX9_MERCURE.path
===================================================================
--- /vendors/XMLIO_SERVER/current/arch/arch-SX9_MERCURE.path	(revision 1897)
+++ /vendors/XMLIO_SERVER/current/arch/arch-SX9_MERCURE.path	(revision 1897)
@@ -0,0 +1,12 @@
+set NETCDF_LIBDIR="-L/ccc/applications/sx9/netcdf-3.6.1/lib"
+set NETCDF_INCDIR="-I/ccc/applications/sx9/netcdf-3.6.1/include"
+set NETCDF_LIB="-lnetcdf"
+set IOIPSL_INCDIR="-I$PWD/../../lib"
+set IOIPSL_LIBDIR="-L$PWD/../../lib"
+set IOIPSL_LIB="-lioipsl"
+set XMLF90_INCDIR="-I$PWD/../XMLF90/inc"
+set XMLF90_LIBDIR="-L$PWD/../XMLF90/lib"
+set XMLF90_LIB="-lxmlf90"
+set OASIS_INCDIR="-I$PWD/../../prism/SX/build/lib/psmile.MPI1"
+set OASIS_LIBDIR="-L$PWD/../../prism/SX/lib"
+set OASIS_LIB="-lpsmile.MPI1 -lmpp_io"
Index: /vendors/XMLIO_SERVER/current/bld.cfg
===================================================================
--- /vendors/XMLIO_SERVER/current/bld.cfg	(revision 1897)
+++ /vendors/XMLIO_SERVER/current/bld.cfg	(revision 1897)
@@ -0,0 +1,50 @@
+# ----------------------- FCM extract configuration file -----------------------
+cfg::type                           bld
+cfg::version                        1.0
+
+
+# ------------------------------------------------------------------------------
+# Build information
+# ------------------------------------------------------------------------------
+
+inc arch.fcm
+inc config.fcm
+
+dir::root   $PWD
+
+search_src           0
+src::ioserver    src/IOSERVER
+src::xmlio       src/XMLIO
+bld::lib::ioserver         ioserver
+bld::lib::xmlio            xmlio
+bld::target libioserver.a libxmlio.a
+#bld::target main.exe client.exe server.exe
+bld::target server.exe
+
+bld::tool::fc        %COMPILER
+bld::tool::ld        %LINKER
+bld::tool::ar        %AR
+bld::tool::make      %MAKE
+bld::tool::fflags    %FFLAGS %INCDIR
+bld::tool::ldflags   %BASE_LD %LIB
+bld::tool::cppflags  %FPP_FLAGS %INCDIR
+bld::tool::fppflags  %FPP_FLAGS %INCDIR
+bld::tool::fppkeys   %CPP_KEY
+# Pre-process code before analysing dependencies
+bld::pp              1
+
+
+# Ignore the following dependencies
+bld::excl_dep        inc::VT.inc
+bld::excl_dep        use::ioipsl
+bld::excl_dep        use::flib_dom
+bld::excl_dep        inc::mpif.h
+bld::excl_dep        use::mpi
+bld::excl_dep        use::mod_prism_get_comm
+bld::excl_dep        use::mod_prism_proto
+
+# Don't generate interface files
+bld::tool::geninterface none
+
+bld::outfile_ext::mod .mod
+
Index: /vendors/XMLIO_SERVER/current/configure
===================================================================
--- /vendors/XMLIO_SERVER/current/configure	(revision 1897)
+++ /vendors/XMLIO_SERVER/current/configure	(revision 1897)
@@ -0,0 +1,155 @@
+#!/bin/csh
+set verbose echo
+set has_arch_opt           = FALSE 
+set has_compile_opt        = FALSE
+set default_compile_flags  = "%PROD_FFLAGS"
+set has_use_vt             = FALSE
+set has_oasis              = FALSE
+set has_no_mpi             = FALSE
+
+top:
+if ($#argv > 0) then
+    switch ($1)
+
+    case -h
+
+########################################################################
+# Manuel en ligne
+########################################################################
+more <<eod
+
+
+configure_ioserver [Options] 
+
+bla, bla, bla
+eod
+exit
+
+########################################################################
+# Lecture des differentes options
+########################################################################
+                   
+    case -a
+    case -arch
+        set has_arch_opt = TRUE
+        set arch="$2" ; shift ; shift ; goto top
+
+    case -prod
+        set has_compile_opt = TRUE
+        set compile_flags="%PROD_FFLAGS"
+        shift ; goto top
+
+    case -dev
+        set has_compile_opt = TRUE
+        set compile_flags="%DEV_FFLAGS"
+        shift ; goto top
+
+    case -debug
+        set has_compile_opt = TRUE
+        set compile_flags="%DEBUG_FFLAGS"
+        shift ; goto top
+
+    case -use_vt
+        set has_use_vt = TRUE
+        shift ; goto top
+        
+    case -oasis
+        set has_oasis = TRUE
+        shift ; goto top
+
+    case -no_mpi
+        set has_no_mpi = TRUE
+        shift ; goto top
+   
+   default
+        echo "unknown option "$1" , exiting..."
+        exit 
+   endsw
+endif
+
+
+#define architecture files
+if ( $has_arch_opt == TRUE) then
+  if ( -e arch/arch-${arch}.fcm ) then
+    rm -f arch.fcm
+    ln -s arch/arch-${arch}.fcm arch.fcm
+  else
+    echo "architecture file : << arch/arch-${arch}.fcm >> is missing, exiting...."
+    exit
+  endif
+  
+  if ( -e arch/arch-${arch}.path ) then
+    rm -f arch.path
+    ln -s arch/arch-${arch}.path arch.path
+  else
+    echo "architecture file : << arch/arch-${arch}.path >> is missing, exiting...."
+    exit
+  endif
+else
+  echo "Warning : architecture not specified, taking default file <<arch.fcm>> and <<arch.path>>" 
+  if ( ! -e arch.fcm ) then
+    echo "architecture file : << arch.fcm >> is missing, exiting...."
+    exit
+  endif
+
+  if ( ! -e arch.fcm ) then
+    echo "architecture file : << arch.path >> is missing, exiting...."
+    exit
+  endif
+endif
+  
+# set compiler flags
+set FFLAGS="%BASE_FFLAGS"
+set LD_FFLAGS="%BASE_LD %MPI_LD"
+set CPP_KEY="%FPP_DEF"
+set INCDIR=""
+set LIB=""
+
+source ./arch.path
+
+# set compiler flags for optimisation
+if ( $has_compile_opt == FALSE ) then
+  set compile_flags=$default_compile_flags
+endif
+set FFLAGS=${FFLAGS}" %MPI_FFLAGS "$compile_flags
+
+
+# add path for xmlf90 library
+
+set INCDIR="$INCDIR $XMLF90_INCDIR"
+set LIB="$LIB $XMLF90_LIBDIR $XMLF90_LIB"
+
+# add path for ioipsl library
+set INCDIR="$INCDIR $IOIPSL_INCDIR"
+set LIB="$LIB $IOIPSL_LIBDIR $IOIPSL_LIB"
+
+if ( $has_oasis == TRUE ) then
+  set INCDIR="$INCDIR $OASIS_INCDIR"
+  set LIB="$LIB $OASIS_LIBDIR $OASIS_LIB"
+  set CPP_KEY="$CPP_KEY USE_OASIS"
+endif
+
+# add path for netcdf library
+set INCDIR="$INCDIR $NETCDF_INCDIR"
+set LIB="$LIB $NETCDF_LIBDIR $NETCDF_LIB"
+
+if ( $has_use_vt == TRUE ) then
+  set INCDIR="$INCDIR $VAMPIR_INCDIR"
+  set LIB="$LIB $VAMPIR_LIBDIR $VAMPIR_LIB"
+  set CPP_KEY="$CPP_KEY USE_VT"
+endif
+
+if ( $has_no_mpi == TRUE ) then
+  set CPP_KEY="NO_MPI $CPP_KEY"
+endif
+
+
+# build config file
+set config_fcm="config.fcm"
+rm -f $config_fcm
+
+echo "%FFLAGS        $FFLAGS"                           >  $config_fcm 
+echo "%CPP_KEY       $CPP_KEY"                          >> $config_fcm
+echo "%LD_FFLAGS     $LD_FFLAGS"                        >> $config_fcm
+echo "%INCDIR        $INCDIR"                           >> $config_fcm
+echo "%LIB           $LIB"                              >> $config_fcm
Index: /vendors/XMLIO_SERVER/current/src/IOSERVER/init_vampir.f90
===================================================================
--- /vendors/XMLIO_SERVER/current/src/IOSERVER/init_vampir.f90	(revision 1897)
+++ /vendors/XMLIO_SERVER/current/src/IOSERVER/init_vampir.f90	(revision 1897)
@@ -0,0 +1,5 @@
+SUBROUTINE init_vampir
+USE mpitrace
+
+  CALL InitVampir
+END SUBROUTINE init_vampir
Index: /vendors/XMLIO_SERVER/current/src/IOSERVER/ios_mpif.h
===================================================================
--- /vendors/XMLIO_SERVER/current/src/IOSERVER/ios_mpif.h	(revision 1897)
+++ /vendors/XMLIO_SERVER/current/src/IOSERVER/ios_mpif.h	(revision 1897)
@@ -0,0 +1,405 @@
+       INTEGER MPI_SOURCE, MPI_TAG, MPI_ERROR
+       PARAMETER (MPI_SOURCE=3,MPI_TAG=4,MPI_ERROR=5)
+       INTEGER MPI_STATUS_SIZE
+       PARAMETER (MPI_STATUS_SIZE=5)
+       INTEGER MPI_STATUS_IGNORE(MPI_STATUS_SIZE)
+       INTEGER MPI_STATUSES_IGNORE(MPI_STATUS_SIZE,1)
+       INTEGER MPI_ERRCODES_IGNORE(1)
+       CHARACTER*1 MPI_ARGVS_NULL(1,1)
+       CHARACTER*1 MPI_ARGV_NULL(1)
+       INTEGER MPI_SUCCESS
+       PARAMETER (MPI_SUCCESS=0)
+       INTEGER MPI_ERR_OTHER
+       PARAMETER (MPI_ERR_OTHER=15)
+       INTEGER MPI_ERR_WIN
+       PARAMETER (MPI_ERR_WIN=45)
+       INTEGER MPI_ERR_FILE
+       PARAMETER (MPI_ERR_FILE=27)
+       INTEGER MPI_ERR_COUNT
+       PARAMETER (MPI_ERR_COUNT=2)
+       INTEGER MPI_ERR_SPAWN
+       PARAMETER (MPI_ERR_SPAWN=42)
+       INTEGER MPI_ERR_BASE
+       PARAMETER (MPI_ERR_BASE=46)
+       INTEGER MPI_ERR_RMA_CONFLICT
+       PARAMETER (MPI_ERR_RMA_CONFLICT=49)
+       INTEGER MPI_ERR_IN_STATUS
+       PARAMETER (MPI_ERR_IN_STATUS=17)
+       INTEGER MPI_ERR_INFO_KEY
+       PARAMETER (MPI_ERR_INFO_KEY=29)
+       INTEGER MPI_ERR_LOCKTYPE
+       PARAMETER (MPI_ERR_LOCKTYPE=47)
+       INTEGER MPI_ERR_OP
+       PARAMETER (MPI_ERR_OP=9)
+       INTEGER MPI_ERR_ARG
+       PARAMETER (MPI_ERR_ARG=12)
+       INTEGER MPI_ERR_READ_ONLY
+       PARAMETER (MPI_ERR_READ_ONLY=40)
+       INTEGER MPI_ERR_SIZE
+       PARAMETER (MPI_ERR_SIZE=51)
+       INTEGER MPI_ERR_BUFFER
+       PARAMETER (MPI_ERR_BUFFER=1)
+       INTEGER MPI_ERR_DUP_DATAREP
+       PARAMETER (MPI_ERR_DUP_DATAREP=24)
+       INTEGER MPI_ERR_UNSUPPORTED_DATAREP
+       PARAMETER (MPI_ERR_UNSUPPORTED_DATAREP=43)
+       INTEGER MPI_ERR_LASTCODE
+       PARAMETER (MPI_ERR_LASTCODE=1073741823)
+       INTEGER MPI_ERR_TRUNCATE
+       PARAMETER (MPI_ERR_TRUNCATE=14)
+       INTEGER MPI_ERR_DISP
+       PARAMETER (MPI_ERR_DISP=52)
+       INTEGER MPI_ERR_PORT
+       PARAMETER (MPI_ERR_PORT=38)
+       INTEGER MPI_ERR_INFO_NOKEY
+       PARAMETER (MPI_ERR_INFO_NOKEY=31)
+       INTEGER MPI_ERR_ASSERT
+       PARAMETER (MPI_ERR_ASSERT=53)
+       INTEGER MPI_ERR_FILE_EXISTS
+       PARAMETER (MPI_ERR_FILE_EXISTS=25)
+       INTEGER MPI_ERR_PENDING
+       PARAMETER (MPI_ERR_PENDING=18)
+       INTEGER MPI_ERR_COMM
+       PARAMETER (MPI_ERR_COMM=5)
+       INTEGER MPI_ERR_KEYVAL
+       PARAMETER (MPI_ERR_KEYVAL=48)
+       INTEGER MPI_ERR_NAME
+       PARAMETER (MPI_ERR_NAME=33)
+       INTEGER MPI_ERR_REQUEST
+       PARAMETER (MPI_ERR_REQUEST=19)
+       INTEGER MPI_ERR_GROUP
+       PARAMETER (MPI_ERR_GROUP=8)
+       INTEGER MPI_ERR_TOPOLOGY
+       PARAMETER (MPI_ERR_TOPOLOGY=10)
+       INTEGER MPI_ERR_TYPE
+       PARAMETER (MPI_ERR_TYPE=3)
+       INTEGER MPI_ERR_TAG
+       PARAMETER (MPI_ERR_TAG=4)
+       INTEGER MPI_ERR_INFO_VALUE
+       PARAMETER (MPI_ERR_INFO_VALUE=30)
+       INTEGER MPI_ERR_NOT_SAME
+       PARAMETER (MPI_ERR_NOT_SAME=35)
+       INTEGER MPI_ERR_RMA_SYNC
+       PARAMETER (MPI_ERR_RMA_SYNC=50)
+       INTEGER MPI_ERR_INFO
+       PARAMETER (MPI_ERR_INFO=28)
+       INTEGER MPI_ERR_NO_MEM
+       PARAMETER (MPI_ERR_NO_MEM=34)
+       INTEGER MPI_ERR_BAD_FILE
+       PARAMETER (MPI_ERR_BAD_FILE=22)
+       INTEGER MPI_ERR_FILE_IN_USE
+       PARAMETER (MPI_ERR_FILE_IN_USE=26)
+       INTEGER MPI_ERR_UNKNOWN
+       PARAMETER (MPI_ERR_UNKNOWN=13)
+       INTEGER MPI_ERR_UNSUPPORTED_OPERATION
+       PARAMETER (MPI_ERR_UNSUPPORTED_OPERATION=44)
+       INTEGER MPI_ERR_QUOTA
+       PARAMETER (MPI_ERR_QUOTA=39)
+       INTEGER MPI_ERR_AMODE
+       PARAMETER (MPI_ERR_AMODE=21)
+       INTEGER MPI_ERR_ROOT
+       PARAMETER (MPI_ERR_ROOT=7)
+       INTEGER MPI_ERR_RANK
+       PARAMETER (MPI_ERR_RANK=6)
+       INTEGER MPI_ERR_DIMS
+       PARAMETER (MPI_ERR_DIMS=11)
+       INTEGER MPI_ERR_NO_SUCH_FILE
+       PARAMETER (MPI_ERR_NO_SUCH_FILE=37)
+       INTEGER MPI_ERR_SERVICE
+       PARAMETER (MPI_ERR_SERVICE=41)
+       INTEGER MPI_ERR_INTERN
+       PARAMETER (MPI_ERR_INTERN=16)
+       INTEGER MPI_ERR_IO
+       PARAMETER (MPI_ERR_IO=32)
+       INTEGER MPI_ERR_ACCESS
+       PARAMETER (MPI_ERR_ACCESS=20)
+       INTEGER MPI_ERR_NO_SPACE
+       PARAMETER (MPI_ERR_NO_SPACE=36)
+       INTEGER MPI_ERR_CONVERSION
+       PARAMETER (MPI_ERR_CONVERSION=23)
+       INTEGER MPI_ERRORS_ARE_FATAL
+       PARAMETER (MPI_ERRORS_ARE_FATAL=1409286144)
+       INTEGER MPI_ERRORS_RETURN
+       PARAMETER (MPI_ERRORS_RETURN=1409286145)
+       INTEGER MPI_IDENT
+       PARAMETER (MPI_IDENT=0)
+       INTEGER MPI_CONGRUENT
+       PARAMETER (MPI_CONGRUENT=1)
+       INTEGER MPI_SIMILAR
+       PARAMETER (MPI_SIMILAR=2)
+       INTEGER MPI_UNEQUAL
+       PARAMETER (MPI_UNEQUAL=3)
+       INTEGER MPI_MAX
+       PARAMETER (MPI_MAX=1476395009)
+       INTEGER MPI_MIN
+       PARAMETER (MPI_MIN=1476395010)
+       INTEGER MPI_SUM
+       PARAMETER (MPI_SUM=1476395011)
+       INTEGER MPI_PROD
+       PARAMETER (MPI_PROD=1476395012)
+       INTEGER MPI_LAND
+       PARAMETER (MPI_LAND=1476395013)
+       INTEGER MPI_BAND
+       PARAMETER (MPI_BAND=1476395014)
+       INTEGER MPI_LOR
+       PARAMETER (MPI_LOR=1476395015)
+       INTEGER MPI_BOR
+       PARAMETER (MPI_BOR=1476395016)
+       INTEGER MPI_LXOR
+       PARAMETER (MPI_LXOR=1476395017)
+       INTEGER MPI_BXOR
+       PARAMETER (MPI_BXOR=1476395018)
+       INTEGER MPI_MINLOC
+       PARAMETER (MPI_MINLOC=1476395019)
+       INTEGER MPI_MAXLOC
+       PARAMETER (MPI_MAXLOC=1476395020)
+       INTEGER MPI_REPLACE
+       PARAMETER (MPI_REPLACE=1476395021)
+       INTEGER MPI_COMM_WORLD
+       PARAMETER (MPI_COMM_WORLD=1140850688)
+       INTEGER MPI_COMM_SELF
+       PARAMETER (MPI_COMM_SELF=1140850689)
+       INTEGER MPI_GROUP_EMPTY
+       PARAMETER (MPI_GROUP_EMPTY=1207959552)
+       INTEGER MPI_COMM_NULL
+       PARAMETER (MPI_COMM_NULL=67108864)
+       INTEGER MPI_WIN_NULL
+       PARAMETER (MPI_WIN_NULL=536870912)
+       INTEGER MPI_FILE_NULL
+       PARAMETER (MPI_FILE_NULL=0)
+       INTEGER MPI_GROUP_NULL
+       PARAMETER (MPI_GROUP_NULL=134217728)
+       INTEGER MPI_OP_NULL
+       PARAMETER (MPI_OP_NULL=402653184)
+       INTEGER MPI_DATATYPE_NULL
+       PARAMETER (MPI_DATATYPE_NULL=201326592)
+       INTEGER MPI_REQUEST_NULL
+       PARAMETER (MPI_REQUEST_NULL=738197504)
+       INTEGER MPI_ERRHANDLER_NULL
+       PARAMETER (MPI_ERRHANDLER_NULL=335544320)
+       INTEGER MPI_INFO_NULL
+       PARAMETER (MPI_INFO_NULL=469762048)
+       INTEGER MPI_TAG_UB
+       PARAMETER (MPI_TAG_UB=1681915906)
+       INTEGER MPI_HOST
+       PARAMETER (MPI_HOST=1681915908)
+       INTEGER MPI_IO
+       PARAMETER (MPI_IO=1681915910)
+       INTEGER MPI_WTIME_IS_GLOBAL
+       PARAMETER (MPI_WTIME_IS_GLOBAL=1681915912)
+       INTEGER MPI_UNIVERSE_SIZE
+       PARAMETER (MPI_UNIVERSE_SIZE=1681915914)
+       INTEGER MPI_LASTUSEDCODE
+       PARAMETER (MPI_LASTUSEDCODE=1681915916)
+       INTEGER MPI_APPNUM
+       PARAMETER (MPI_APPNUM=1681915918)
+       INTEGER MPI_WIN_BASE
+       PARAMETER (MPI_WIN_BASE=1711276034)
+       INTEGER MPI_WIN_SIZE
+       PARAMETER (MPI_WIN_SIZE=1711276036)
+       INTEGER MPI_WIN_DISP_UNIT
+       PARAMETER (MPI_WIN_DISP_UNIT=1711276038)
+       INTEGER MPI_MAX_ERROR_STRING
+       PARAMETER (MPI_MAX_ERROR_STRING=512)
+       INTEGER MPI_MAX_NAME_STRING
+       PARAMETER (MPI_MAX_NAME_STRING=63)
+       INTEGER MPI_MAX_PORT_NAME
+       PARAMETER (MPI_MAX_PORT_NAME=256)
+       INTEGER MPI_MAX_OBJECT_NAME
+       PARAMETER (MPI_MAX_OBJECT_NAME=128)
+       INTEGER MPI_MAX_INFO_KEY
+       PARAMETER (MPI_MAX_INFO_KEY=255)
+       INTEGER MPI_MAX_INFO_VAL
+       PARAMETER (MPI_MAX_INFO_VAL=1024)
+       INTEGER MPI_MAX_PROCESSOR_NAME
+       PARAMETER (MPI_MAX_PROCESSOR_NAME=128)
+       INTEGER MPI_MAX_DATAREP_STRING
+       PARAMETER (MPI_MAX_DATAREP_STRING=128)
+       INTEGER MPI_UNDEFINED, MPI_UNDEFINED_RANK
+       PARAMETER (MPI_UNDEFINED=(-32766))
+       PARAMETER (MPI_UNDEFINED_RANK=(-32766))
+       INTEGER MPI_KEYVAL_INVALID
+       PARAMETER (MPI_KEYVAL_INVALID=603979776)
+       INTEGER MPI_BSEND_OVERHEAD
+       PARAMETER (MPI_BSEND_OVERHEAD=95)
+       INTEGER MPI_PROC_NULL
+       PARAMETER (MPI_PROC_NULL=-1)
+       INTEGER MPI_ANY_SOURCE
+       PARAMETER (MPI_ANY_SOURCE=-2)
+       INTEGER MPI_ANY_TAG
+       PARAMETER (MPI_ANY_TAG=-1)
+       INTEGER MPI_ROOT
+       PARAMETER (MPI_ROOT=-3)
+       INTEGER MPI_GRAPH
+       PARAMETER (MPI_GRAPH=1)
+       INTEGER MPI_CART
+       PARAMETER (MPI_CART=2)
+       INTEGER MPI_VERSION
+       PARAMETER (MPI_VERSION=2)
+       INTEGER MPI_SUBVERSION
+       PARAMETER (MPI_SUBVERSION=0)
+       INTEGER MPI_LOCK_EXCLUSIVE
+       PARAMETER (MPI_LOCK_EXCLUSIVE=234)
+       INTEGER MPI_LOCK_SHARED
+       PARAMETER (MPI_LOCK_SHARED=235)
+       INTEGER MPI_COMPLEX
+       PARAMETER (MPI_COMPLEX=1275072554)
+       INTEGER MPI_DOUBLE_COMPLEX
+       PARAMETER (MPI_DOUBLE_COMPLEX=1275072546)
+       INTEGER MPI_LOGICAL
+       PARAMETER (MPI_LOGICAL=1275069469)
+       INTEGER MPI_REAL
+       PARAMETER (MPI_REAL=1275070505)
+       INTEGER MPI_DOUBLE_PRECISION
+       PARAMETER (MPI_DOUBLE_PRECISION=1275070495)
+       INTEGER MPI_INTEGER
+       PARAMETER (MPI_INTEGER=1275069467)
+       INTEGER MPI_2INTEGER
+       PARAMETER (MPI_2INTEGER=1275070496)
+       INTEGER MPI_2COMPLEX
+       PARAMETER (MPI_2COMPLEX=1275072548)
+       INTEGER MPI_2DOUBLE_PRECISION
+       PARAMETER (MPI_2DOUBLE_PRECISION=1275072547)
+       INTEGER MPI_2REAL
+       PARAMETER (MPI_2REAL=1275070497)
+       INTEGER MPI_2DOUBLE_COMPLEX
+       PARAMETER (MPI_2DOUBLE_COMPLEX=1275076645)
+       INTEGER MPI_CHARACTER
+       PARAMETER (MPI_CHARACTER=1275068698)
+       INTEGER MPI_BYTE
+       PARAMETER (MPI_BYTE=1275068685)
+       INTEGER MPI_UB
+       PARAMETER (MPI_UB=(1275068433))
+       INTEGER MPI_LB
+       PARAMETER (MPI_LB=(1275068432))
+       INTEGER MPI_PACKED
+       PARAMETER (MPI_PACKED=(1275068687))
+       INTEGER MPI_INTEGER1
+       PARAMETER (MPI_INTEGER1=1275068717)
+       INTEGER MPI_INTEGER2
+       PARAMETER (MPI_INTEGER2=1275068975)
+       INTEGER MPI_INTEGER4
+       PARAMETER (MPI_INTEGER4=1275069488)
+       INTEGER MPI_INTEGER8
+       PARAMETER (MPI_INTEGER8=1275070513)
+       INTEGER MPI_INTEGER16
+       PARAMETER (MPI_INTEGER16=MPI_DATATYPE_NULL)
+       INTEGER MPI_REAL4
+       PARAMETER (MPI_REAL4=1275069479)
+       INTEGER MPI_REAL8
+       PARAMETER (MPI_REAL8=1275070505)
+       INTEGER MPI_REAL16
+       PARAMETER (MPI_REAL16=1275072555)
+       INTEGER MPI_COMPLEX8
+       PARAMETER (MPI_COMPLEX8=1275070504)
+       INTEGER MPI_COMPLEX16
+       PARAMETER (MPI_COMPLEX16=1275072554)
+       INTEGER MPI_COMPLEX32
+       PARAMETER (MPI_COMPLEX32=1275076652)
+       INTEGER MPI_ADDRESS_KIND, MPI_OFFSET_KIND
+       PARAMETER (MPI_ADDRESS_KIND=8)
+       PARAMETER (MPI_OFFSET_KIND=8)
+       INTEGER MPI_COMBINER_NAMED
+       PARAMETER (MPI_COMBINER_NAMED=1)
+       INTEGER MPI_COMBINER_DUP
+       PARAMETER (MPI_COMBINER_DUP=2)
+       INTEGER MPI_COMBINER_CONTIGUOUS
+       PARAMETER (MPI_COMBINER_CONTIGUOUS=3)
+       INTEGER MPI_COMBINER_VECTOR
+       PARAMETER (MPI_COMBINER_VECTOR=4)
+       INTEGER MPI_COMBINER_HVECTOR_INTEGER
+       PARAMETER (MPI_COMBINER_HVECTOR_INTEGER=5)
+       INTEGER MPI_COMBINER_HVECTOR
+       PARAMETER (MPI_COMBINER_HVECTOR=6)
+       INTEGER MPI_COMBINER_INDEXED
+       PARAMETER (MPI_COMBINER_INDEXED=7)
+       INTEGER MPI_COMBINER_HINDEXED_INTEGER
+       PARAMETER (MPI_COMBINER_HINDEXED_INTEGER=8)
+       INTEGER MPI_COMBINER_HINDEXED
+       PARAMETER (MPI_COMBINER_HINDEXED=9)
+       INTEGER MPI_COMBINER_INDEXED_BLOCK
+       PARAMETER (MPI_COMBINER_INDEXED_BLOCK=10)
+       INTEGER MPI_COMBINER_STRUCT_INTEGER
+       PARAMETER (MPI_COMBINER_STRUCT_INTEGER=11)
+       INTEGER MPI_COMBINER_STRUCT
+       PARAMETER (MPI_COMBINER_STRUCT=12)
+       INTEGER MPI_COMBINER_SUBARRAY
+       PARAMETER (MPI_COMBINER_SUBARRAY=13)
+       INTEGER MPI_COMBINER_DARRAY
+       PARAMETER (MPI_COMBINER_DARRAY=14)
+       INTEGER MPI_COMBINER_F90_REAL
+       PARAMETER (MPI_COMBINER_F90_REAL=15)
+       INTEGER MPI_COMBINER_F90_COMPLEX
+       PARAMETER (MPI_COMBINER_F90_COMPLEX=16)
+       INTEGER MPI_COMBINER_F90_INTEGER
+       PARAMETER (MPI_COMBINER_F90_INTEGER=17)
+       INTEGER MPI_COMBINER_RESIZED
+       PARAMETER (MPI_COMBINER_RESIZED=18)
+       INTEGER MPI_MODE_NOCHECK
+       PARAMETER (MPI_MODE_NOCHECK=1024)
+       INTEGER MPI_MODE_NOSTORE
+       PARAMETER (MPI_MODE_NOSTORE=2048)
+       INTEGER MPI_MODE_NOPUT
+       PARAMETER (MPI_MODE_NOPUT=4096)
+       INTEGER MPI_MODE_NOPRECEDE
+       PARAMETER (MPI_MODE_NOPRECEDE=8192)
+       INTEGER MPI_MODE_NOSUCCEED
+       PARAMETER (MPI_MODE_NOSUCCEED=16384)
+       INTEGER MPI_THREAD_SINGLE
+       PARAMETER (MPI_THREAD_SINGLE=0)
+       INTEGER MPI_THREAD_FUNNELED
+       PARAMETER (MPI_THREAD_FUNNELED=1)
+       INTEGER MPI_THREAD_SERIALIZED
+       PARAMETER (MPI_THREAD_SERIALIZED=2)
+       INTEGER MPI_THREAD_MULTIPLE
+       PARAMETER (MPI_THREAD_MULTIPLE=3)
+       INTEGER MPI_MODE_RDONLY
+       PARAMETER (MPI_MODE_RDONLY=2)
+       INTEGER MPI_MODE_RDWR
+       PARAMETER (MPI_MODE_RDWR=8)
+       INTEGER MPI_MODE_WRONLY
+       PARAMETER (MPI_MODE_WRONLY=4)
+       INTEGER MPI_MODE_DELETE_ON_CLOSE
+       PARAMETER (MPI_MODE_DELETE_ON_CLOSE=16)
+       INTEGER MPI_MODE_UNIQUE_OPEN
+       PARAMETER (MPI_MODE_UNIQUE_OPEN=32)
+       INTEGER MPI_MODE_CREATE
+       PARAMETER (MPI_MODE_CREATE=1)
+       INTEGER MPI_MODE_EXCL
+       PARAMETER (MPI_MODE_EXCL=64)
+       INTEGER MPI_MODE_APPEND
+       PARAMETER (MPI_MODE_APPEND=128)
+       INTEGER MPI_MODE_SEQUENTIAL
+       PARAMETER (MPI_MODE_SEQUENTIAL=256)
+       INTEGER MPI_SEEK_SET
+       PARAMETER (MPI_SEEK_SET=600)
+       INTEGER MPI_SEEK_CUR
+       PARAMETER (MPI_SEEK_CUR=602)
+       INTEGER MPI_SEEK_END
+       PARAMETER (MPI_SEEK_END=604)
+       INTEGER MPI_ORDER_C
+       PARAMETER (MPI_ORDER_C=56)
+       INTEGER MPI_ORDER_FORTRAN
+       PARAMETER (MPI_ORDER_FORTRAN=57)
+       INTEGER MPI_DISTRIBUTE_BLOCK
+       PARAMETER (MPI_DISTRIBUTE_BLOCK=121)
+       INTEGER MPI_DISTRIBUTE_CYCLIC
+       PARAMETER (MPI_DISTRIBUTE_CYCLIC=122)
+       INTEGER MPI_DISTRIBUTE_NONE
+       PARAMETER (MPI_DISTRIBUTE_NONE=123)
+       INTEGER MPI_DISTRIBUTE_DFLT_DARG
+       PARAMETER (MPI_DISTRIBUTE_DFLT_DARG=-49767)
+       INTEGER MPI_DISPLACEMENT_CURRENT
+       PARAMETER (MPI_DISPLACEMENT_CURRENT=-54278278)
+       INTEGER MPI_BOTTOM, MPI_IN_PLACE
+       EXTERNAL MPI_DUP_FN, MPI_NULL_DELETE_FN, MPI_NULL_COPY_FN
+       EXTERNAL MPI_WTIME, MPI_WTICK
+       EXTERNAL PMPI_WTIME, PMPI_WTICK
+       EXTERNAL MPI_COMM_DUP_FN, MPI_COMM_NULL_DELETE_FN
+       EXTERNAL MPI_COMM_NULL_COPY_FN
+       EXTERNAL MPI_WIN_DUP_FN, MPI_WIN_NULL_DELETE_FN
+       EXTERNAL MPI_WIN_NULL_COPY_FN
+       EXTERNAL MPI_TYPE_DUP_FN, MPI_TYPE_NULL_DELETE_FN
+       EXTERNAL MPI_TYPE_NULL_COPY_FN
+       DOUBLE PRECISION MPI_WTIME, MPI_WTICK
+       DOUBLE PRECISION PMPI_WTIME, PMPI_WTICK
Index: /vendors/XMLIO_SERVER/current/src/IOSERVER/main.f90
===================================================================
--- /vendors/XMLIO_SERVER/current/src/IOSERVER/main.f90	(revision 1897)
+++ /vendors/XMLIO_SERVER/current/src/IOSERVER/main.f90	(revision 1897)
@@ -0,0 +1,70 @@
+PROGRAM ioslave
+USE mod_pack, ONLY : set_pack_buffer,pack,unpack
+USE mod_wait
+IMPLICIT NONE
+
+  INTEGER,DIMENSION(3) :: a=(/1,2,3/)
+  REAL                 :: b = 4.5
+  REAL                 :: c = 6.7
+  INTEGER,DIMENSION(3) :: aout
+  REAL                 :: bout,cout
+  LOGICAL,DIMENSION(5) :: d=(/.TRUE.,.FALSE.,.FALSE.,.TRUE.,.TRUE./)
+  LOGICAL,DIMENSION(5) :: dout
+  CHARACTER            :: e='C'
+  CHARACTER            :: eout
+  CHARACTER(len=11)    :: f(3)
+  CHARACTER(len=11)    :: fout(3)
+  INTEGER(kind=8),dimension(:),POINTER :: buffer
+  REAL,dimension(:),POINTER :: buffer_field
+  DOUBLE PRECISION :: t
+  
+  ALLOCATE(buffer(1024))
+  ALLOCATE(buffer_field(1024))
+  
+  CALL set_pack_buffer(buffer,1)
+  
+  f(1)="COUCOU1"
+  f(2)="COUCOU2"
+  f(3)="COUCOU3"
+  
+  CALL pack(b)
+  CALL pack(f)
+  CALL pack(a)
+  CALL pack(d)
+  CALL pack(e)
+  CALL pack(c)
+  
+  CALL set_pack_buffer(buffer,1)
+  CALL unpack(bout)
+  CALL unpack(fout)
+  CALL unpack(aout)
+  CALL unpack(dout)
+  CALL unpack(eout)
+  CALL unpack(cout)
+  
+  PRINT *,a,b,c,d,e,"  ",f
+  PRINT *,aout,bout,cout,dout,eout,"  ",fout
+
+  CALL Init_wait
+  
+  t=top()
+  CALL wait_us(10)
+  t=top()
+  
+  PRINT *,"ATTENTE 10 us",t
+
+  t=top()
+  CALL wait_us(250)
+  t=top()
+  
+  PRINT *,"ATTENTE 250 us",t
+
+  t=top()
+  CALL wait_us(1235)
+  t=top()
+  
+  PRINT *,"ATTENTE 1235 us",t
+
+
+END PROGRAM ioslave
+
Index: /vendors/XMLIO_SERVER/current/src/IOSERVER/mod_box_grid.f90
===================================================================
--- /vendors/XMLIO_SERVER/current/src/IOSERVER/mod_box_grid.f90	(revision 1897)
+++ /vendors/XMLIO_SERVER/current/src/IOSERVER/mod_box_grid.f90	(revision 1897)
@@ -0,0 +1,170 @@
+MODULE box_grid
+  
+  INTEGER, PARAMETER :: nb_grid_max=100
+  INTEGER            :: nb_grid=0
+
+  TYPE domain
+    INTEGER :: ni
+    INTEGER :: nj
+    INTEGER :: ibegin
+    INTEGER :: iend
+    INTEGER :: jbegin
+    INTEGER :: jend
+    REAL,POINTER :: lon(:,:)
+    REAL,POINTER :: lat(:,:)
+  END TYPE domain
+  
+  TYPE grid
+    TYPE(domain)         :: local_domain
+    TYPE(domain),POINTER :: task_domain(:)
+    INTEGER                          :: ni
+    INTEGER                          :: nj
+    INTEGER                          :: nb_task
+  END TYPE grid
+  
+  TYPE(grid),SAVE,TARGET :: grids(nb_grid_max)
+  
+  INTEGER,SAVE :: max_ni
+  INTEGER,SAVE :: max_nj
+  INTEGER,SAVE :: max_vert_size = 100
+  REAL,SAVE,ALLOCATABLE :: Field_buffer(:,:,:) 
+  
+CONTAINS
+
+  SUBROUTINE create_new_grid(ni_glo,nj_glo,nb_task,id)
+  IMPLICIT NONE
+    INTEGER,INTENT(IN)  :: ni_glo
+    INTEGER,INTENT(IN)  :: nj_glo
+    INTEGER,INTENT(IN)  :: nb_task
+    INTEGER,INTENT(OUT) :: id
+  
+    nb_grid=nb_grid+1
+    id=nb_grid
+    
+    grids(id)%ni=ni_glo
+    grids(id)%nj=nj_glo
+    grids(id)%nb_task=nb_task
+   
+    ALLOCATE(grids(id)%task_domain(nb_task))
+ 
+  END SUBROUTINE create_new_grid
+ 
+  SUBROUTINE Init_task_domain(id,task,ni,nj,ibegin,jbegin,lon,lat)
+  IMPLICIT NONE
+    INTEGER, INTENT(IN) :: id
+    INTEGER, INTENT(IN) :: task
+    INTEGER, INTENT(IN) :: ni
+    INTEGER, INTENT(IN) :: nj
+    INTEGER, INTENT(IN) :: ibegin
+    INTEGER, INTENT(IN) :: jbegin
+    REAL,    INTENT(IN) :: lon(ni,nj)
+    REAL,    INTENT(IN) :: lat(ni,nj)
+ 
+    TYPE(domain), POINTER :: Pt_dom
+    
+    Pt_dom=>grids(id)%task_domain(task)
+    
+    Pt_dom%ni=ni
+    Pt_dom%nj=nj
+    Pt_dom%ibegin=ibegin
+    Pt_dom%jbegin=jbegin   
+    Pt_dom%iend=ibegin+ni-1
+    Pt_dom%jend=jbegin+nj-1
+    ALLOCATE(Pt_dom%lon(ni,nj))
+    ALLOCATE(Pt_dom%lat(ni,nj))
+    Pt_dom%lon(:,:)=lon(:,:)
+    Pt_dom%lat(:,:)=lat(:,:)
+  
+  END SUBROUTINE Init_task_domain
+
+  
+  SUBROUTINE Init_grids
+  IMPLICIT NONE
+    INTEGER :: rank
+    INTEGER :: ib,ie,jb,je
+    TYPE(grid),POINTER :: Pt_grid
+    TYPE(domain),POINTER :: local_domain
+    TYPE(domain),POINTER :: task_domain(:)
+    INTEGER :: id
+    
+      max_ni=0
+      max_nj=0
+    
+      DO id=1,nb_grid
+        pt_grid=>grids(id)
+        local_domain=>pt_grid%local_domain
+        task_domain=>pt_grid%task_domain
+        
+        local_domain%ibegin=task_domain(1)%ibegin
+        local_domain%iend=task_domain(1)%iend
+        local_domain%jbegin=task_domain(1)%jbegin
+        local_domain%jend=task_domain(1)%jend
+      
+      DO rank=1,pt_grid%nb_task
+        IF (task_domain(rank)%ibegin < local_domain%ibegin)   local_domain%ibegin = task_domain(rank)%ibegin
+        IF (task_domain(rank)%iend   > local_domain%iend  )   local_domain%iend   = task_domain(rank)%iend
+        IF (task_domain(rank)%jbegin < local_domain%jbegin)   local_domain%jbegin = task_domain(rank)%jbegin
+        IF (task_domain(rank)%jend   > local_domain%jend  )   local_domain%jend   = task_domain(rank)%jend
+      ENDDO
+    
+      local_domain%ni = local_domain%iend-local_domain%ibegin+1
+      local_domain%nj = local_domain%jend-local_domain%jbegin+1
+      ALLOCATE(local_domain%lon(local_domain%ni,local_domain%nj))
+      ALLOCATE(local_domain%lat(local_domain%ni,local_domain%nj))
+      
+      DO rank=1,pt_grid%nb_task
+        ib=task_domain(rank)%ibegin-local_domain%ibegin+1
+        ie=task_domain(rank)%iend-local_domain%ibegin+1
+        jb=task_domain(rank)%jbegin-local_domain%jbegin+1
+        je=task_domain(rank)%jend-local_domain%jbegin+1
+
+        task_domain(rank)%ibegin=ib
+        task_domain(rank)%iend=ie
+        task_domain(rank)%jbegin=jb
+        task_domain(rank)%jend=je
+      
+        local_domain%lon(ib:ie,jb:je)=task_domain(rank)%lon(:,:)
+        local_domain%lat(ib:ie,jb:je)=task_domain(rank)%lat(:,:)
+      ENDDO
+  
+      IF (local_domain%ni > max_ni) max_ni=local_domain%ni
+      IF (local_domain%nj > max_nj) max_nj=local_domain%nj
+    ENDDO
+  
+    ALLOCATE(field_buffer(max_ni,max_nj,max_vert_size))
+    
+  END SUBROUTINE Init_grids
+  
+  SUBROUTINE bufferize_field2d(field,id,task)
+  IMPLICIT NONE
+    REAL,INTENT(IN) :: field(:,:)
+    INTEGER,INTENT(IN) :: id
+    INTEGER,INTENT(IN) :: task
+    TYPE(domain), POINTER :: Pt
+
+    Pt=>grids(id)%task_domain(task)
+    field_buffer(Pt%ibegin:Pt%iend,Pt%jbegin:Pt%jend,1)=field(:,:)
+      
+  END SUBROUTINE bufferize_field2d
+  
+  
+  SUBROUTINE bufferize_field3d(field,id,task)
+  IMPLICIT NONE
+    REAL,INTENT(IN) :: field(:,:,:)
+    INTEGER,INTENT(IN) :: id
+    INTEGER,INTENT(IN) :: task
+    TYPE(domain), POINTER :: Pt
+   
+    Pt=>grids(id)%task_domain(task)
+
+    IF (size(field,3)>max_vert_size) THEN
+      DEALLOCATE(field_buffer)
+      max_vert_size=max_vert_size*2
+      ALLOCATE(field_buffer(max_ni,max_nj,max_vert_size))
+    ENDIF
+    
+    field_buffer(Pt%ibegin:Pt%iend,Pt%jbegin:Pt%jend,1:size(field,3))=field(:,:,:)
+      
+  END SUBROUTINE bufferize_field3d
+    
+END MODULE box_grid
Index: /vendors/XMLIO_SERVER/current/src/IOSERVER/mod_boxed_domain.f90
===================================================================
--- /vendors/XMLIO_SERVER/current/src/IOSERVER/mod_boxed_domain.f90	(revision 1897)
+++ /vendors/XMLIO_SERVER/current/src/IOSERVER/mod_boxed_domain.f90	(revision 1897)
@@ -0,0 +1,145 @@
+MODULE boxed_domain
+
+  INTEGER,SAVE :: ni_glo
+  INTEGER,SAVE :: nj_glo
+  INTEGER,SAVE :: nb_proc
+  
+  TYPE local_domain
+    INTEGER :: ni
+    INTEGER :: nj
+    INTEGER :: ibegin
+    INTEGER :: iend
+    INTEGER :: jbegin
+    INTEGER :: jend
+    REAL,POINTER :: lon(:,:)
+    REAL,POINTER :: lat(:,:)
+  END TYPE local_domain
+  
+  TYPE(local_domain),ALLOCATABLE,SAVE,TARGET :: domains(:)
+  
+  
+  INTEGER,SAVE :: ni
+  INTEGER,SAVE :: nj
+  INTEGER,SAVE :: ibegin
+  INTEGER,SAVE :: iend
+  INTEGER,SAVE :: jbegin
+  INTEGER,SAVE :: jend
+  
+  REAL,SAVE,ALLOCATABLE :: lon(:,:)
+  REAL,SAVE,ALLOCATABLE :: lat(:,:)
+  
+  INTEGER,SAVE :: max_vert_size = 100
+  REAL,SAVE,ALLOCATABLE :: Field_buffer(:,:,:)  
+  
+CONTAINS
+
+  SUBROUTINE Init_global_domain(ni_glo_,nj_glo_,nb_proc_)
+  IMPLICIT NONE
+  INTEGER, INTENT(IN) :: ni_glo_
+  INTEGER, INTENT(IN) :: nj_glo_
+  INTEGER, INTENT(IN) :: nb_proc_
+  
+    ni_glo=ni_glo_
+    nj_glo=nj_glo_
+    nb_proc=nb_proc_
+    
+    ALLOCATE(domains(nb_proc))
+ 
+  END SUBROUTINE Init_global_domain
+
+
+  SUBROUTINE Init_local_domain(rank,ni,nj,ibegin,jbegin,lon,lat)
+  IMPLICIT NONE
+    INTEGER, INTENT(IN) :: rank
+    INTEGER, INTENT(IN) :: ni
+    INTEGER, INTENT(IN) :: nj
+    INTEGER, INTENT(IN) :: ibegin    
+    INTEGER, INTENT(IN) :: jbegin
+    REAL, INTENT(IN)    :: lon(ni,nj)
+    REAL, INTENT(IN)    :: lat(ni,nj)
+    
+    domains(rank)%ni=ni
+    domains(rank)%nj=nj
+    domains(rank)%ibegin=ibegin
+    domains(rank)%jbegin=jbegin   
+    domains(rank)%iend=ibegin+ni-1
+    domains(rank)%jend=jbegin+nj-1
+    ALLOCATE(domains(rank)%lon(ni,nj))
+    ALLOCATE(domains(rank)%lat(ni,nj))
+    domains(rank)%lon(:,:)=lon(:,:)
+    domains(rank)%lat(:,:)=lat(:,:)
+  
+  END SUBROUTINE Init_local_domain
+  
+  
+  SUBROUTINE Init_domain
+  IMPLICIT NONE
+    INTEGER :: rank
+    INTEGER :: ib,ie,jb,je
+    ibegin=domains(1)%ibegin
+    iend=domains(1)%iend
+    jbegin=domains(1)%jbegin
+    jend=domains(1)%jend
+    
+    DO rank=1,nb_proc
+      IF (domains(rank)%ibegin<ibegin) ibegin=domains(rank)%ibegin
+      IF (domains(rank)%iend>iend) iend=domains(rank)%iend
+      IF (domains(rank)%jbegin<jbegin) jbegin=domains(rank)%jbegin
+      IF (domains(rank)%jend>jend) jend=domains(rank)%jend
+    ENDDO
+    
+    ni=iend-ibegin+1
+    nj=jend-jbegin+1
+    ALLOCATE(lon(ni,nj))
+    ALLOCATE(lat(ni,nj))
+    
+    DO rank=1,nb_proc
+      ib=domains(rank)%ibegin-ibegin+1
+      ie=domains(rank)%iend-ibegin+1
+      jb=domains(rank)%jbegin-jbegin+1
+      je=domains(rank)%jend-jbegin+1
+
+      domains(rank)%ibegin=ib
+      domains(rank)%iend=ie
+      domains(rank)%jbegin=jb
+      domains(rank)%jend=je
+      
+      lon(ib:ie,jb:je)=domains(rank)%lon(:,:)
+      lat(ib:ie,jb:je)=domains(rank)%lat(:,:)
+    ENDDO
+  
+    ALLOCATE(field_buffer(ni,nj,max_vert_size))
+    
+  END SUBROUTINE 
+  
+  SUBROUTINE bufferize_field2d(field,rank)
+  IMPLICIT NONE
+    REAL,INTENT(IN) :: field(:,:)
+    INTEGER,INTENT(IN) :: rank
+    TYPE(local_domain), POINTER :: Pt
+
+    Pt=>domains(rank)
+    field_buffer(Pt%ibegin:Pt%iend,Pt%jbegin:Pt%jend,1)=field(:,:)
+      
+  END SUBROUTINE bufferize_field2d
+  
+  
+  SUBROUTINE bufferize_field3d(field,rank)
+  IMPLICIT NONE
+    REAL,INTENT(IN) :: field(:,:,:)
+    INTEGER,INTENT(IN) :: rank
+    TYPE(local_domain), POINTER :: Pt
+   
+    Pt=>domains(rank)
+    IF (size(field,3)>max_vert_size) THEN
+      DEALLOCATE(field_buffer)
+      max_vert_size=max_vert_size*2
+      ALLOCATE(field_buffer(ni,nj,max_vert_size))
+    ENDIF
+    
+    field_buffer(Pt%ibegin:Pt%iend,Pt%jbegin:Pt%jend,1:size(field,3))=field(:,:,:)
+      
+  END SUBROUTINE bufferize_field3d
+
+    
+END MODULE boxed_domain
Index: /vendors/XMLIO_SERVER/current/src/IOSERVER/mod_event_client.f90
===================================================================
--- /vendors/XMLIO_SERVER/current/src/IOSERVER/mod_event_client.f90	(revision 1897)
+++ /vendors/XMLIO_SERVER/current/src/IOSERVER/mod_event_client.f90	(revision 1897)
@@ -0,0 +1,340 @@
+MODULE mod_event_client
+  USE mod_pack, ONLY : pack, pack_field
+  USE mod_mpi_buffer_client, ONLY : create_request, finalize_request,is_last_request
+  USE mod_event_parameters 
+  USE mod_ioserver_namelist
+      
+CONTAINS
+
+  SUBROUTINE event__swap_context(id)
+  USE iomanager
+  IMPLICIT NONE
+    CHARACTER(LEN=*),INTENT(IN) :: id
+    
+    IF (using_server) THEN
+      CALL create_request(event_id_swap_context)
+      CALL pack(LEN(TRIM(id)))
+      CALL pack(TRIM(id))
+      CALL Finalize_request
+    ELSE
+      CALL iom__swap_context(TRIM(id))
+    ENDIF
+    
+  END SUBROUTINE  event__swap_context
+  
+  
+  SUBROUTINE event__parse_xml_file(filename)
+  USE iomanager
+  IMPLICIT NONE
+    CHARACTER(LEN=*),INTENT(IN) :: filename
+    
+    IF (using_server) THEN
+      CALL create_request(event_id_parse_xml_file)
+      CALL pack(LEN(TRIM(filename)))
+      CALL pack(TRIM(filename))
+      CALL Finalize_request
+    ELSE
+      CALL iom__parse_xml_file(filename)
+    ENDIF
+    
+  END SUBROUTINE  event__parse_xml_file
+
+  SUBROUTINE event__set_vert_axis(vert_name,vert_value)
+  USE iomanager
+  IMPLICIT NONE
+    CHARACTER(LEN=*),INTENT(IN) :: vert_name
+    REAL,INTENT(IN)             :: vert_value(:)
+    
+    
+    IF (using_server) THEN
+      CALL create_request(event_id_set_vert_axis)
+      CALL pack(LEN(TRIM(vert_name)))
+      CALL pack(TRIM(vert_name))
+      CALL pack(SIZE(vert_value))
+      CALL pack(vert_value)
+      CALL Finalize_request
+    ELSE
+      CALL iom__set_vert_axis(vert_name,vert_value)
+    ENDIF
+    
+  END SUBROUTINE  event__set_vert_axis
+
+  SUBROUTINE event__set_grid_dimension(name,ni_glo,nj_glo)
+  USE iomanager
+  IMPLICIT NONE
+    CHARACTER(LEN=*),INTENT(IN) :: name
+    INTEGER,INTENT(IN) :: ni_glo
+    INTEGER,INTENT(IN) :: nj_glo
+    
+    IF (using_server) THEN
+      CALL create_request(event_id_set_grid_dimension)
+      CALL pack(LEN(TRIM(name)))
+      CALL pack(TRIM(name))
+      CALL pack(ni_glo)
+      CALL pack(nj_glo)
+      CALL Finalize_request
+    ELSE
+      CALL iom__set_grid_dimension(name,ni_glo,nj_glo)
+    ENDIF
+    
+  END SUBROUTINE event__set_grid_dimension
+
+  
+  SUBROUTINE event__set_grid_domain(name,ni,nj,ibegin,jbegin,lon,lat)
+  USE iomanager
+  IMPLICIT NONE
+    CHARACTER(LEN=*),INTENT(IN) :: name
+    INTEGER,INTENT(IN) :: ni
+    INTEGER,INTENT(IN) :: nj
+    INTEGER,INTENT(IN) :: ibegin
+    INTEGER,INTENT(IN) :: jbegin
+    REAL,INTENT(IN)    :: lon(ni,nj)
+    REAL,INTENT(IN)    :: lat(ni,nj)
+    
+    IF (using_server) THEN
+      CALL create_request(event_id_set_grid_domain)
+      CALL pack(LEN(TRIM(name)))
+      CALL pack(TRIM(name))
+      CALL pack(ni)
+      CALL pack(nj)
+      CALL pack(ibegin)
+      CALL pack(jbegin)
+      CALL pack(lon)
+      CALL pack(lat)
+      CALL Finalize_request
+    ELSE
+     CALL iom__set_grid_domain(name,ni,nj,ibegin,jbegin,lon,lat)
+    ENDIF
+      
+  END SUBROUTINE event__set_grid_domain
+
+  SUBROUTINE event__set_grid_type_nemo(name)
+  USE iomanager
+  IMPLICIT NONE
+    CHARACTER(LEN=*),INTENT(IN) :: name
+    
+    IF (using_server) THEN
+      CALL create_request(event_id_set_grid_type_nemo)
+      CALL pack(LEN(TRIM(name)))
+      CALL pack(TRIM(name))
+      CALL Finalize_request
+    ELSE
+     CALL iom__set_grid_type_nemo(name)
+    ENDIF
+      
+  END SUBROUTINE event__set_grid_type_nemo
+  
+  SUBROUTINE event__set_grid_type_lmdz(name,nbp,offset)
+  USE iomanager
+  IMPLICIT NONE
+    CHARACTER(LEN=*),INTENT(IN) :: name
+    INTEGER,INTENT(IN)          :: nbp
+    INTEGER,INTENT(IN)          :: offset
+        
+    IF (using_server) THEN
+      CALL create_request(event_id_set_grid_type_lmdz)
+      CALL pack(LEN(TRIM(name)))
+      CALL pack(TRIM(name))
+      CALL pack(nbp)
+      CALL pack(offset)
+      CALL Finalize_request
+    ELSE
+     CALL iom__set_grid_type_lmdz(name,nbp,offset)
+    ENDIF
+      
+  END SUBROUTINE event__set_grid_type_lmdz
+  
+  SUBROUTINE event__set_time_parameters(itau0,zjulian,zdt)
+  USE iomanager
+  IMPLICIT NONE
+    INTEGER,INTENT(IN)  :: itau0
+    REAL,   INTENT(IN)  :: zjulian
+    REAL,   INTENT(IN)  :: zdt
+        
+    IF (using_server) THEN
+      CALL create_request(event_id_set_time_parameters)
+      CALL pack(itau0)
+      CALL pack(zjulian)
+      CALL pack(zdt)
+      CALL Finalize_request
+    ELSE
+      CALL iom__set_time_parameters(itau0,zjulian,zdt)
+    ENDIF
+    
+  END SUBROUTINE event__set_time_parameters
+
+
+  SUBROUTINE event__set_calendar(str_calendar)
+  USE iomanager
+  IMPLICIT NONE
+    CHARACTER(LEN=*),INTENT(IN) :: str_calendar
+        
+    IF (using_server) THEN
+      CALL create_request(event_id_set_calendar)
+      CALL pack(LEN(TRIM(str_calendar)))
+      CALL pack(TRIM(str_calendar))
+      CALL Finalize_request
+    ELSE
+     CALL iom__set_calendar(str_calendar)
+    ENDIF
+      
+  END SUBROUTINE event__set_calendar
+  
+  
+  SUBROUTINE event__enable_field(varname)
+  USE iomanager
+  IMPLICIT NONE
+    CHARACTER(len=*),INTENT(IN)     :: varname
+
+    IF (using_server) THEN
+      CALL create_request(event_id_enable_field)
+      CALL pack(len(varname))
+      CALL pack(varname)
+      CALL Finalize_request 
+    ELSE
+      CALL iom__enable_field(varname)
+    ENDIF
+    
+  END SUBROUTINE event__enable_field
+
+  SUBROUTINE event__disable_field(varname)
+  USE iomanager
+  IMPLICIT NONE
+    CHARACTER(len=*),INTENT(IN)     :: varname
+
+    IF (using_server) THEN
+      CALL create_request(event_id_disable_field)
+      CALL pack(len(varname))
+      CALL pack(varname)
+      CALL Finalize_request 
+    ELSE
+      CALL iom__disable_field(varname)
+    ENDIF
+    
+  END SUBROUTINE event__disable_field
+  
+  SUBROUTINE event__write_field1d(varname,var)
+  USE iomanager
+  IMPLICIT NONE
+    CHARACTER(len=*),INTENT(IN)     :: varname
+    REAL, DIMENSION(:),INTENT(IN) :: var
+
+    IF (using_server) THEN
+      CALL create_request(event_id_write_field1d)
+      CALL pack(len(varname))
+      CALL pack(size(var,1))
+      CALL pack(varname)
+      CALL pack_field(var)
+      CALL Finalize_request 
+    ELSE
+      CALL iom__write_field1d(varname,var)
+    ENDIF
+    
+  END SUBROUTINE event__write_field1d
+
+  SUBROUTINE event__write_field2d(varname,var)
+  USE iomanager
+  IMPLICIT NONE
+    CHARACTER(len=*),INTENT(IN)     :: varname
+    REAL, DIMENSION(:,:),INTENT(IN) :: var
+
+    IF (using_server) THEN
+      CALL create_request(event_id_write_field2d)
+      CALL pack(len(varname))
+      CALL pack(size(var,1))
+      CALL pack(size(var,2))
+      CALL pack(varname)
+      CALL pack_field(var)
+      CALL Finalize_request 
+    ELSE
+      CALL iom__write_field2d(varname,var)
+    ENDIF
+    
+  END SUBROUTINE event__write_field2d
+  
+  SUBROUTINE event__write_field3d(varname,var)
+  USE iomanager
+  IMPLICIT NONE
+    CHARACTER(len=*),INTENT(IN)     :: varname
+    REAL, DIMENSION(:,:,:),INTENT(IN) :: var
+
+    IF (using_server) THEN
+      CALL create_request(event_id_write_field3d)
+      CALL pack(len(varname))
+      CALL pack(size(var,1))
+      CALL pack(size(var,2))
+      CALL pack(size(var,3))
+      CALL pack(varname)
+      CALL pack_field(var)
+      CALL Finalize_request 
+    ELSE
+      CALL iom__write_field3d(varname,var)
+    ENDIF
+  END SUBROUTINE event__write_field3d
+  
+
+  SUBROUTINE event__set_timestep(timestep)
+  USE iomanager
+  IMPLICIT NONE
+    INTEGER,INTENT(IN) :: timestep
+    
+    IF (using_server) THEN
+      CALL create_request(event_id_set_timestep)
+      CALL pack(timestep)
+      CALL Finalize_request
+    ELSE
+      CALL iom__set_timestep(timestep)
+    ENDIF
+
+  END SUBROUTINE event__set_timestep
+    
+    
+  SUBROUTINE event__close_io_definition
+  USE iomanager
+  IMPLICIT NONE
+    
+    IF (using_server) THEN
+      CALL create_request(event_id_close_io_definition)
+      CALL Finalize_request
+    ELSE
+      CALL iom__close_io_definition
+    ENDIF
+
+  END SUBROUTINE event__close_io_definition
+
+  
+  SUBROUTINE event__set_attribut(id,attrib)
+  USE iomanager
+  USE mod_attribut
+  IMPLICIT NONE
+    CHARACTER(LEN=*),INTENT(IN) :: id
+    TYPE(attribut),INTENT(IN)   :: attrib
+ 
+    IF (using_server) THEN
+      CALL create_request(event_id_set_attribut)
+      CALL pack(len(id))
+      CALL pack(id)
+      CALL pack(attrib)
+      CALL Finalize_request
+    ELSE
+      CALL iom__set_attribut(id,attrib)
+    ENDIF
+ 
+  END SUBROUTINE event__set_attribut  
+
+  SUBROUTINE event__stop_ioserver
+  USE iomanager
+  IMPLICIT NONE
+ 
+    IF (using_server) THEN
+      CALL create_request(event_id_stop_ioserver)
+      is_last_request=.TRUE.
+      CALL Finalize_request
+    ELSE
+      CALL iom__finalize
+    ENDIF
+
+  END SUBROUTINE event__stop_ioserver
+    
+  
+END MODULE mod_event_client
Index: /vendors/XMLIO_SERVER/current/src/IOSERVER/mod_event_parameters.f90
===================================================================
--- /vendors/XMLIO_SERVER/current/src/IOSERVER/mod_event_parameters.f90	(revision 1897)
+++ /vendors/XMLIO_SERVER/current/src/IOSERVER/mod_event_parameters.f90	(revision 1897)
@@ -0,0 +1,21 @@
+MODULE mod_event_parameters
+  INTEGER, PARAMETER :: event_id_parse_xml_file        = 100
+  INTEGER, PARAMETER :: event_id_set_local_domain      = 101
+  INTEGER, PARAMETER :: event_id_set_vert_axis         = 102
+  INTEGER, PARAMETER :: event_id_set_time_parameters   = 103
+  INTEGER, PARAMETER :: event_id_set_timestep          = 104
+  INTEGER, PARAMETER :: event_id_write_field2d         = 105
+  INTEGER, PARAMETER :: event_id_write_field3d         = 106
+  INTEGER, PARAMETER :: event_id_close_io_definition   = 107
+  INTEGER, PARAMETER :: event_id_set_grid_dimension    = 108
+  INTEGER, PARAMETER :: event_id_set_grid_domain       = 109
+  INTEGER, PARAMETER :: event_id_set_grid_type_nemo    = 110
+  INTEGER, PARAMETER :: event_id_enable_field          = 111
+  INTEGER, PARAMETER :: event_id_disable_field         = 112
+  INTEGER, PARAMETER :: event_id_swap_context          = 113
+  INTEGER, PARAMETER :: event_id_set_grid_type_lmdz    = 114
+  INTEGER, PARAMETER :: event_id_write_field1d         = 115
+  INTEGER, PARAMETER :: event_id_set_attribut          = 116
+  INTEGER, PARAMETER :: event_id_set_calendar          = 117
+  INTEGER, PARAMETER :: event_id_stop_ioserver         = 999
+END MODULE mod_event_parameters
Index: /vendors/XMLIO_SERVER/current/src/IOSERVER/mod_event_server.f90
===================================================================
--- /vendors/XMLIO_SERVER/current/src/IOSERVER/mod_event_server.f90	(revision 1897)
+++ /vendors/XMLIO_SERVER/current/src/IOSERVER/mod_event_server.f90	(revision 1897)
@@ -0,0 +1,465 @@
+MODULE mod_event_server
+  USE mod_pack, ONLY : unpack, unpack_field
+  USE mod_event_parameters
+  USE iomanager
+  
+CONTAINS
+
+  SUBROUTINE Process_event(current_rank,is_terminated)
+  IMPLICIT NONE
+    INTEGER :: event_id
+    INTEGER, INTENT(IN) :: current_rank
+    LOGICAL,INTENT(OUT) :: is_terminated
+     
+    CALL iom__set_current_rank(current_rank)
+     
+    is_terminated=.FALSE.
+    
+    CALL unpack(event_id)
+    
+    SELECT CASE (event_id)
+    
+      CASE (event_id_swap_context)
+        CALL event__swap_context
+        
+      CASE (event_id_parse_xml_file)
+        CALL event__parse_xml_file 
+
+      CASE (event_id_set_vert_axis)
+        CALL event__set_vert_axis 
+     
+      CASE (event_id_set_grid_dimension)
+        CALL event__set_grid_dimension
+      
+      CASE (event_id_set_grid_domain)
+        CALL event__set_grid_domain
+
+      CASE (event_id_set_grid_type_nemo)
+        CALL event__set_grid_type_nemo
+
+      CASE (event_id_set_grid_type_lmdz)
+        CALL event__set_grid_type_lmdz
+
+      CASE (event_id_set_time_parameters)
+        CALL event__set_time_parameters
+
+      CASE (event_id_close_io_definition)
+        CALL event__close_io_definition  
+
+      CASE (event_id_set_timestep)
+        CALL event__set_timestep
+
+      CASE (event_id_set_calendar)
+        CALL event__set_calendar
+
+      CASE (event_id_enable_field)
+        CALL event__enable_field
+      
+      CASE (event_id_disable_field)
+        CALL event__disable_field
+
+      CASE (event_id_write_Field1d)
+        CALL event__write_Field1d
+
+      CASE (event_id_write_Field2d)
+        CALL event__write_Field2d
+
+      CASE (event_id_write_Field3d)
+        CALL event__write_Field3d
+
+      CASE (event_id_set_attribut)
+        CALL event__set_attribut
+
+      CASE (event_id_stop_ioserver)
+        is_terminated=.TRUE.  
+        PRINT *,"TERMINATE_EVENT RECEIVED"
+        
+
+      CASE DEFAULT 
+        STOP 'UNDEFINED EVENT'
+      
+     END SELECT
+     
+   END SUBROUTINE Process_event
+   
+  SUBROUTINE event__swap_context
+  IMPLICIT NONE
+    INTEGER :: id_size
+   
+    CALL unpack(id_size)
+    CALL sub_internal(id_size)
+     
+  CONTAINS
+    
+    SUBROUTINE sub_internal(id_size)
+      INTEGER :: id_size
+      CHARACTER(LEN=id_size) :: id     
+     
+       CALL unpack(id)
+     
+       CALL iom__swap_context(id)
+       
+     END SUBROUTINE sub_internal
+  
+  END SUBROUTINE event__swap_context
+  
+
+  SUBROUTINE event__parse_xml_file
+  IMPLICIT NONE
+    INTEGER :: name_size
+   
+    CALL unpack(name_size)
+    CALL sub_internal(name_size)
+     
+  CONTAINS
+    
+    SUBROUTINE sub_internal(name_size)
+      INTEGER :: name_size
+      CHARACTER(LEN=name_size) :: filename     
+     
+       CALL unpack(filename)
+     
+       CALL iom__parse_xml_file(filename)
+     END SUBROUTINE sub_internal
+  
+  END SUBROUTINE event__parse_xml_file
+  
+  
+  SUBROUTINE event__set_grid_dimension
+  IMPLICIT NONE    
+    INTEGER :: name_size
+    INTEGER :: ni_glo
+    INTEGER :: nj_glo
+   
+    CALL unpack(name_size)
+    CALL sub_internal(name_size)
+     
+  CONTAINS
+    
+    SUBROUTINE sub_internal(name_size)
+      INTEGER :: name_size
+      CHARACTER(LEN=name_size) :: name     
+     
+       CALL unpack(name)
+       CALL unpack(ni_glo)
+       CALL unpack(nj_glo)
+     
+       CALL iom__set_grid_dimension(name,ni_glo,nj_glo)
+     END SUBROUTINE sub_internal
+   
+   END SUBROUTINE event__set_grid_dimension
+
+
+  SUBROUTINE event__set_grid_domain 
+  IMPLICIT NONE    
+    INTEGER :: name_size
+    INTEGER :: ni
+    INTEGER :: nj
+    INTEGER :: ibegin
+    INTEGER :: jbegin
+    REAL,ALLOCATABLE :: lon(:,:)
+    REAL,ALLOCATABLE :: lat(:,:)
+
+    CALL unpack(name_size)
+    CALL sub_internal(name_size)
+     
+  CONTAINS
+    
+    SUBROUTINE sub_internal(name_size)
+      INTEGER :: name_size
+      CHARACTER(LEN=name_size) :: name     
+     
+       CALL unpack(name)
+    
+       CALL unpack(ni)
+       CALL unpack(nj)
+       CALL unpack(ibegin)
+       CALL unpack(jbegin)
+    
+       ALLOCATE(lon(ni,nj))
+       ALLOCATE(lat(ni,nj))
+       CALL unpack(lon)
+       CALL unpack(lat)
+    
+       CALL iom__set_grid_domain(name,ni,nj,ibegin,jbegin,lon,lat)
+
+     END SUBROUTINE sub_internal
+   
+  END SUBROUTINE event__set_grid_domain   
+
+
+  SUBROUTINE event__set_grid_type_nemo 
+  IMPLICIT NONE    
+    INTEGER :: name_size
+
+    CALL unpack(name_size)
+    CALL sub_internal(name_size)
+     
+  CONTAINS
+    
+    SUBROUTINE sub_internal(name_size)
+      INTEGER :: name_size
+      CHARACTER(LEN=name_size) :: name     
+     
+       CALL unpack(name)
+       CALL iom__set_grid_type_nemo(name)
+
+     END SUBROUTINE sub_internal
+   
+  END SUBROUTINE event__set_grid_type_nemo   
+
+  SUBROUTINE event__set_grid_type_lmdz 
+  IMPLICIT NONE    
+    INTEGER :: name_size
+
+    CALL unpack(name_size)
+    CALL sub_internal(name_size)
+     
+  CONTAINS
+    
+    SUBROUTINE sub_internal(name_size)
+      INTEGER :: name_size
+      CHARACTER(LEN=name_size) :: name     
+      INTEGER                  :: nbp
+      INTEGER                  :: offset
+      
+       CALL unpack(name)
+       CALL unpack(nbp)
+       CALL unpack(offset)
+       CALL iom__set_grid_type_lmdz(name,nbp,offset)
+
+     END SUBROUTINE sub_internal
+   
+  END SUBROUTINE event__set_grid_type_lmdz   
+
+  SUBROUTINE event__set_vert_axis
+  IMPLICIT NONE
+    INTEGER :: name_size
+    INTEGER :: vert_size 
+    REAL,ALLOCATABLE :: vert_value(:)
+    
+    CALL unpack(name_size)
+    CALL sub_internal(name_size)
+
+  CONTAINS
+    
+    SUBROUTINE sub_internal(name_size)
+      INTEGER :: name_size
+      CHARACTER(LEN=name_size) :: name
+    
+      CALL unpack(name)
+      CALL unpack(vert_size)
+      ALLOCATE(vert_value(vert_size))
+      CALL unpack(vert_value) 
+      
+      CALL iom__set_vert_axis(name,vert_value)
+      
+    END SUBROUTINE sub_internal
+  END SUBROUTINE event__set_vert_axis
+
+  SUBROUTINE event__set_time_parameters
+  IMPLICIT NONE
+    INTEGER   :: itau0
+    REAL      :: zjulian
+    REAL      :: zdt
+      
+    CALL unpack(itau0)
+    CALL unpack(zjulian)
+    CALL unpack(zdt)
+    
+    CALL iom__set_time_parameters(itau0,zjulian,zdt)
+     
+  END SUBROUTINE event__set_time_parameters
+  
+
+  SUBROUTINE event__enable_field
+  IMPLICIT NONE
+    INTEGER :: lenc
+      
+    CALL unpack(lenc)
+    CALL sub_internal(lenc)
+  
+  CONTAINS
+    SUBROUTINE sub_internal(lenc)
+    IMPLICIT NONE
+      INTEGER :: lenc
+      CHARACTER(len=lenc) :: varname
+      
+      CALL unpack(varname)
+      
+      CALL iom__enable_field(varname)
+
+    END SUBROUTINE sub_internal
+  END SUBROUTINE event__enable_field
+  
+
+  SUBROUTINE event__disable_field
+  IMPLICIT NONE
+    INTEGER :: lenc
+      
+    CALL unpack(lenc)
+    CALL sub_internal(lenc)
+  
+  CONTAINS
+    SUBROUTINE sub_internal(lenc)
+    IMPLICIT NONE
+      INTEGER :: lenc
+      CHARACTER(len=lenc) :: varname
+      
+      CALL unpack(varname)
+      
+      CALL iom__disable_field(varname)
+
+    END SUBROUTINE sub_internal
+    
+  END SUBROUTINE event__disable_field
+  
+      
+  SUBROUTINE event__write_field1D
+  IMPLICIT NONE
+    INTEGER :: lenc
+    INTEGER :: dim1
+      
+    CALL unpack(lenc)
+    CALL unpack(dim1)
+    CALL sub_internal(lenc,dim1)
+  
+  CONTAINS
+    SUBROUTINE sub_internal(lenc,dim1)
+    IMPLICIT NONE
+      INTEGER :: lenc
+      INTEGER :: dim1
+      CHARACTER(len=lenc) :: varname
+      REAL                :: var(dim1)
+      
+      CALL unpack(varname)
+      CALL unpack_field(var)
+      
+      CALL iom__write_Field1d(varname,var)
+
+    END SUBROUTINE sub_internal
+  END SUBROUTINE event__write_field1d
+
+  SUBROUTINE event__write_field2D
+  IMPLICIT NONE
+    INTEGER :: lenc
+    INTEGER :: dim1
+    INTEGER :: dim2
+      
+    CALL unpack(lenc)
+    CALL unpack(dim1)
+    CALL unpack(dim2)
+    CALL sub_internal(lenc,dim1,dim2)
+  
+  CONTAINS
+    SUBROUTINE sub_internal(lenc,dim1,dim2)
+    IMPLICIT NONE
+      INTEGER :: lenc
+      INTEGER :: dim1
+      INTEGER :: dim2
+      CHARACTER(len=lenc) :: varname
+      REAL                :: var(dim1,dim2)
+      
+      CALL unpack(varname)
+      CALL unpack_field(var)
+      
+      CALL iom__write_Field2d(varname,var)
+
+    END SUBROUTINE sub_internal
+  END SUBROUTINE event__write_field2d
+    
+    
+  SUBROUTINE event__write_field3d
+  IMPLICIT NONE
+    INTEGER :: lenc
+    INTEGER :: dim1
+    INTEGER :: dim2
+    INTEGER :: dim3
+    
+    CALL unpack(lenc)
+    CALL unpack(dim1)
+    CALL unpack(dim2)
+    CALL unpack(dim3)
+    CALL sub_internal(lenc,dim1,dim2,dim3)
+ 
+  CONTAINS
+ 
+    SUBROUTINE sub_internal(lenc,dim1,dim2,dim3)
+    IMPLICIT NONE
+      INTEGER :: lenc
+      INTEGER :: dim1
+      INTEGER :: dim2
+      INTEGER :: dim3
+ 
+      CHARACTER(len=lenc) :: varname
+      REAL                :: var(dim1,dim2,dim3)
+        
+      CALL unpack(varname)
+      CALL unpack_field(var)
+       
+      CALL iom__write_field3d(varname,var)
+         
+    END SUBROUTINE sub_internal
+
+  END SUBROUTINE event__write_field3d
+    
+    
+  SUBROUTINE event__set_timestep
+  IMPLICIT NONE
+    INTEGER :: timestep
+     
+    CALL unpack(timestep)
+    CALL iom__set_timestep(timestep)
+    
+  END SUBROUTINE event__set_timestep
+    
+
+  SUBROUTINE event__set_calendar
+  IMPLICIT NONE
+    INTEGER :: lenc
+      
+    CALL unpack(lenc)
+    CALL sub_internal(lenc)
+  
+  CONTAINS
+    SUBROUTINE sub_internal(lenc)
+    IMPLICIT NONE
+      INTEGER :: lenc
+      CHARACTER(len=lenc) :: str_calendar
+      
+      CALL unpack(str_calendar)
+      
+      CALL iom__set_calendar(str_calendar)
+
+    END SUBROUTINE sub_internal
+  END SUBROUTINE event__set_calendar
+  
+    
+  SUBROUTINE event__close_io_definition
+  IMPLICIT NONE
+    
+    CALL iom__close_io_definition
+    
+  END SUBROUTINE event__close_io_definition
+  
+  SUBROUTINE event__set_attribut
+   USE mod_attribut
+   IMPLICIT NONE
+     TYPE(attribut) :: attrib
+     INTEGER        :: len_id
+     
+     CALL unpack(len_id)
+     CALL sub_internal
+   CONTAINS
+      
+     SUBROUTINE sub_internal
+       CHARACTER(LEN=len_id) :: id
+       
+       CALL unpack(id)
+       CALL unpack(attrib)
+       CALL iom__set_attribut(id,attrib)
+       CALL attr_deallocate(attrib)
+     END SUBROUTINE sub_internal
+  END SUBROUTINE event__set_attribut    
+
+END MODULE mod_event_server   
Index: /vendors/XMLIO_SERVER/current/src/IOSERVER/mod_field_bufferize.f90
===================================================================
--- /vendors/XMLIO_SERVER/current/src/IOSERVER/mod_field_bufferize.f90	(revision 1897)
+++ /vendors/XMLIO_SERVER/current/src/IOSERVER/mod_field_bufferize.f90	(revision 1897)
@@ -0,0 +1,94 @@
+MODULE field_bufferize
+  
+  INTEGER,SAVE      :: nx=0
+  INTEGER,SAVE      :: ny=0
+  INTEGER,SAVE      :: nz=0
+    
+  REAL,POINTER,SAVE :: field_buffer(:,:,:)
+  
+
+  
+CONTAINS
+
+  SUBROUTINE bufferize_field(ni,ibegin,nj,jbegin,nk,kbegin,nbp,field,i_index,j_index,mask)
+  IMPLICIT NONE
+    INTEGER,INTENT(IN) :: ni
+    INTEGER,INTENT(IN) :: ibegin
+    INTEGER,INTENT(IN) :: nj
+    INTEGER,INTENT(IN) :: jbegin
+    INTEGER,INTENT(IN) :: nk
+    INTEGER,INTENT(IN) :: kbegin
+    INTEGER,INTENT(IN) :: nbp
+    REAL,INTENT(IN)    :: field(nbp,nk)
+    INTEGER,INTENT(IN) :: i_index(nbp)
+    INTEGER,INTENT(IN) :: j_index(nbp)
+    LOGICAL,INTENT(IN),OPTIONAL :: mask(nbp)  
+    
+    INTEGER :: iend
+    INTEGER :: jend
+    INTEGER :: kend 
+
+    LOGICAL      :: need_reallocate
+    REAL,POINTER :: tmp_buffer(:,:,:)
+    INTEGER      :: i,j,k,n
+    
+    iend=ibegin+ni-1
+    jend=jbegin+nj-1
+    kend=kbegin+nk-1
+    
+    IF (PRESENT(mask)) THEN
+      DO k=kbegin,kend
+        DO n=1,nbp
+          i=i_index(n)+ibegin-1
+          j=j_index(n)+jbegin-1
+          IF (mask(n)) field_buffer(i,j,k)=field(n,k)
+        ENDDO
+      ENDDO
+    ELSE
+      DO k=kbegin,kend
+        DO n=1,nbp
+          i=i_index(n)+ibegin-1
+          j=j_index(n)+jbegin-1
+          field_buffer(i,j,k)=field(n,k)
+        ENDDO
+      ENDDO
+    ENDIF
+    
+  END SUBROUTINE bufferize_field
+
+  SUBROUTINE Init_field_Bufferize(ni,nj,nk)
+  IMPLICIT NONE
+  INTEGER,INTENT(IN) :: ni
+  INTEGER,INTENT(IN) :: nj
+  INTEGER,INTENT(IN) :: nk
+     
+    LOGICAL :: need_reallocate
+    
+    
+    need_reallocate=.FALSE.
+    
+    IF ( ni > nx) THEN
+      nx=ni
+      need_reallocate=.TRUE.
+    ENDIF
+    
+    IF ( nj > ny) THEN
+      ny=nj
+      need_reallocate=.TRUE.
+    ENDIF
+
+    IF ( nk > nz) THEN
+      nz=nk
+      need_reallocate=.TRUE.
+    ENDIF
+    
+    IF (need_reallocate) THEN
+      IF (ASSOCIATED(field_buffer)) DEALLOCATE(field_buffer)
+      ALLOCATE(field_buffer(nx,ny,nz))
+    ENDIF
+
+    field_buffer(1:nx,1:ny,1:nz)=0.
+
+  END SUBROUTINE  init_field_bufferize         
+
+END MODULE field_bufferize
Index: /vendors/XMLIO_SERVER/current/src/IOSERVER/mod_global_memory.f90
===================================================================
--- /vendors/XMLIO_SERVER/current/src/IOSERVER/mod_global_memory.f90	(revision 1897)
+++ /vendors/XMLIO_SERVER/current/src/IOSERVER/mod_global_memory.f90	(revision 1897)
@@ -0,0 +1,123 @@
+MODULE mod_global_memory
+
+  INTERFACE allocate_global_memory
+    MODULE PROCEDURE Allocate_global_memory_r8,    &
+                     Allocate_global_memory_i8,    &
+!                     Allocate_global_memory_r4,    &
+                     Allocate_global_memory_i4
+  END INTERFACE Allocate_global_memory
+  
+CONTAINS
+
+  SUBROUTINE Allocate_global_memory_r8(size,Pt)
+  USE mpi_mod
+  IMPLICIT NONE
+    REAL(kind=8),POINTER :: Pt(:)
+    INTEGER              :: size
+
+    POINTER (Pbuffer,MPI_Buffer(size))
+    REAL(kind=8) :: MPI_Buffer
+    INTEGER(KIND=MPI_ADDRESS_KIND) :: BS 
+    INTEGER :: ierr
+    
+    BS=8*size
+    CALL MPI_ALLOC_MEM(BS,MPI_INFO_NULL,Pbuffer,ierr)
+    CALL associate_buffer(MPI_Buffer,Pt)
+  
+  CONTAINS
+  
+    SUBROUTINE associate_buffer(MPI_buffer,Pt)
+    IMPLICIT NONE
+      REAL(kind=8),DIMENSION(:),target :: MPI_Buffer
+      REAL(kind=8),POINTER             :: Pt(:)
+      Pt=>MPI_buffer
+    END SUBROUTINE associate_buffer
+  
+  END SUBROUTINE Allocate_global_memory_r8
+
+
+
+  SUBROUTINE Allocate_global_memory_i8(size,Pt)
+  USE mpi_mod
+  IMPLICIT NONE
+    INTEGER(kind=8),POINTER :: Pt(:)
+    INTEGER              :: size
+
+    POINTER (Pbuffer,MPI_Buffer(size))
+    INTEGER(kind=8) :: MPI_Buffer
+    INTEGER(KIND=MPI_ADDRESS_KIND) :: BS 
+    INTEGER :: ierr
+    
+    BS=8*size
+    CALL MPI_ALLOC_MEM(BS,MPI_INFO_NULL,Pbuffer,ierr)
+    CALL associate_buffer(MPI_Buffer,Pt)
+  
+  CONTAINS
+  
+    SUBROUTINE associate_buffer(MPI_buffer,Pt)
+    IMPLICIT NONE
+      INTEGER(kind=8),DIMENSION(:),target :: MPI_Buffer
+      INTEGER(kind=8),POINTER             :: Pt(:)
+      Pt=>MPI_buffer
+    END SUBROUTINE associate_buffer
+  
+  END SUBROUTINE Allocate_global_memory_i8
+  
+  
+!  SUBROUTINE Allocate_global_memory_r4(size,Pt)
+!  USE mpi_mod
+!  IMPLICIT NONE
+!    REAL(kind=4),POINTER :: Pt(:)
+!    INTEGER              :: size
+!
+!    POINTER (Pbuffer,MPI_Buffer(size))
+!    REAL(kind=4) :: MPI_Buffer
+!    INTEGER(KIND=MPI_ADDRESS_KIND) :: BS 
+!    INTEGER :: ierr
+!    
+!    BS=4*size
+!    CALL MPI_ALLOC_MEM(BS,MPI_INFO_NULL,Pbuffer,ierr)
+!    CALL associate_buffer(MPI_Buffer,Pt)
+!  
+!  CONTAINS
+!  
+!    SUBROUTINE associate_buffer(MPI_buffer,Pt)
+!    IMPLICIT NONE
+!      REAL(kind=4),DIMENSION(:),target :: MPI_Buffer
+!      REAL(kind=4),POINTER             :: Pt(:)
+!      Pt=>MPI_buffer
+!    END SUBROUTINE associate_buffer
+!  
+!  END SUBROUTINE Allocate_global_memory_r4
+
+
+
+
+  SUBROUTINE Allocate_global_memory_i4(size,Pt)
+  USE mpi_mod
+  IMPLICIT NONE
+    INTEGER(kind=4),POINTER :: Pt(:)
+    INTEGER              :: size
+
+    POINTER (Pbuffer,MPI_Buffer(size))
+    INTEGER(kind=4) :: MPI_Buffer
+    INTEGER(KIND=MPI_ADDRESS_KIND) :: BS 
+    INTEGER :: ierr
+    
+    BS=4*size
+    CALL MPI_ALLOC_MEM(BS,MPI_INFO_NULL,Pbuffer,ierr)
+    CALL associate_buffer(MPI_Buffer,Pt)
+  
+  CONTAINS
+  
+    SUBROUTINE associate_buffer(MPI_buffer,Pt)
+    IMPLICIT NONE
+      INTEGER(kind=4),DIMENSION(:),target :: MPI_Buffer
+      INTEGER(kind=4),POINTER             :: Pt(:)
+      Pt=>MPI_buffer
+    END SUBROUTINE associate_buffer
+  
+  END SUBROUTINE Allocate_global_memory_i4
+  
+  
+END MODULE mod_global_memory
Index: /vendors/XMLIO_SERVER/current/src/IOSERVER/mod_interface_ioipsl.f90
===================================================================
--- /vendors/XMLIO_SERVER/current/src/IOSERVER/mod_interface_ioipsl.f90	(revision 1897)
+++ /vendors/XMLIO_SERVER/current/src/IOSERVER/mod_interface_ioipsl.f90	(revision 1897)
@@ -0,0 +1,268 @@
+MODULE mod_interface_ioipsl
+
+ 
+  INTEGER,PARAMETER     :: id_file=1
+
+
+CONTAINS
+
+  SUBROUTINE init_interface_ioipsl
+  USE xmlio
+  IMPLICIT NONE
+  
+    
+  END SUBROUTINE init_interface_ioipsl
+
+  SUBROUTINE set_calendar(str_calendar)
+  USE ioipsl
+    CHARACTER(LEN=*) :: str_calendar
+    
+    CALL ioconf_calendar(str_calendar)
+    
+  END SUBROUTINE set_calendar
+  
+  
+  SUBROUTINE set_time_parameters(ini_timestep0,zjulian0,timestep0)
+  USE xmlio
+  IMPLICIT NONE
+    INTEGER :: ini_timestep0
+    REAL :: zjulian0, timestep0
+
+    timestep_value=timestep0
+    initial_timestep=ini_timestep0
+    initial_date=zjulian0
+
+  END SUBROUTINE set_time_parameters
+
+  SUBROUTINE Create_file_definition(nb_server,server_rank)
+  USE ioipsl
+  USE xmlio
+  IMPLICIT NONE
+    INTEGER,INTENT(IN)  :: nb_server
+    INTEGER,INTENT(IN)  :: server_rank
+    
+    TYPE(file_dep),POINTER :: pt_file_dep
+    TYPE(file),POINTER     :: pt_file
+    TYPE(field),POINTER    :: pt_field
+    TYPE(grid),POINTER     :: pt_grid
+    TYPE(zoom),POINTER     :: pt_zoom
+    TYPE(axis),POINTER     :: pt_axis
+    TYPE(domain),POINTER   :: pt_domain
+
+    TYPE(sorted_list),POINTER :: axis_id
+    LOGICAL :: found                  
+    INTEGER :: ioipsl_axis_id
+    INTEGER :: ioipsl_file_id
+    INTEGER :: ioipsl_hori_id
+    INTEGER :: ioipsl_domain_id
+    INTEGER :: i,j
+    CHARACTER(LEN=20) :: direction
+    CHARACTER(LEN=255) :: full_name
+    CALL xmlio__close_definition 
+    
+    ALLOCATE(axis_id)
+    
+    DO i=1,file_enabled%size
+      CALL sorted_list__new(axis_id)
+      
+      pt_file_dep=>file_enabled%at(i)%pt
+      pt_file=>pt_file_dep%file
+      
+      pt_grid=>pt_file_dep%grids%at(1)%pt
+      pt_domain=>pt_grid%domain
+      pt_zoom=>pt_file_dep%zooms%at(1)%pt
+!      print *,TRIM(pt_file%name),' ',TRIM(pt_zoom%id)
+!      print*,'Global --->',pt_zoom%ni_glo,pt_zoom%nj_glo,pt_zoom%ibegin_glo,pt_zoom%jbegin_glo
+!      print*,'Local  --->',pt_zoom%ni_loc,pt_zoom%nj_loc,pt_zoom%ibegin_loc,pt_zoom%jbegin_loc
+      
+      IF (pt_zoom%ni_loc*pt_zoom%nj_loc > 0) THEN
+        
+        full_name=TRIM(pt_file%name)
+        IF (pt_file%has_name_suffix) full_name=TRIM(full_name)//TRIM(pt_file%name_suffix) 
+        IF ( (pt_zoom%ni_loc == pt_zoom%ni_glo) .AND. (pt_zoom%nj_loc == pt_zoom%nj_glo) ) THEN 
+
+          CALL histbeg(TRIM(full_name),pt_domain%ni,pt_domain%lon, pt_domain%nj, pt_domain%lat, & 
+                     pt_zoom%ibegin_loc, pt_zoom%ni_loc,pt_zoom%jbegin_loc,pt_zoom%nj_loc,         &
+                     initial_timestep, initial_date, timestep_value,                               &
+                     ioipsl_hori_id, ioipsl_file_id)
+         ELSE                                              
+
+          CALL set_ioipsl_domain_id(pt_grid,nb_server,server_rank,ioipsl_domain_id)
+          CALL histbeg(TRIM(full_name),pt_domain%ni,pt_domain%lon, pt_domain%nj, pt_domain%lat,  &
+                     pt_zoom%ibegin_loc, pt_zoom%ni_loc,pt_zoom%jbegin_loc,pt_zoom%nj_loc,          &
+                     initial_timestep, initial_date, timestep_value,                                &
+                     ioipsl_hori_id, ioipsl_file_id,domain_id=ioipsl_domain_id)                                              
+       
+         ENDIF
+        
+      
+        DO j=1,pt_file_dep%axis%size
+          pt_axis=>pt_file_dep%axis%at(j)%pt
+          CALL sorted_list__find(axis_id,hash(Pt_axis%name),ioipsl_axis_id,found)
+          IF (.NOT. found) THEN
+            IF (TRIM(pt_axis%name) /= "none") THEN
+              
+              IF (pt_axis%has_positive) THEN 
+                IF (pt_axis%positive) THEN
+                  direction="up"
+                ELSE
+                  direction="down"
+                ENDIF
+              ELSE
+                direction='unknown'
+              ENDIF
+
+              CALL histvert(ioipsl_file_id, TRIM(pt_axis%name),TRIM(pt_axis%description),    &
+                           TRIM(pt_axis%unit), pt_axis%size,pt_axis%values, ioipsl_axis_id,  &
+                           pdirect=direction)
+              CALL sorted_list__add(axis_id,hash(Pt_axis%name),ioipsl_axis_id)
+            ENDIF
+          ENDIF
+        ENDDO
+        
+        DO j=1,pt_file_dep%fields%size
+          pt_field=>pt_file_dep%fields%at(j)%pt
+          IF (pt_field%axis%name=="none") THEN
+            pt_field%internal(id_file)=ioipsl_file_id
+            CALL histdef(ioipsl_file_id, TRIM(pt_field%name), pt_field%description,            &
+                      &  pt_field%unit, pt_field%grid%domain%ni, pt_field%grid%domain%nj,      &
+                      &  ioipsl_hori_id, 1, 1, 1, -99, 32, pt_field%operation,                 &
+                      &  real(pt_field%freq_op), real(pt_file%output_freq) )
+          ELSE
+            pt_field%internal(id_file)=ioipsl_file_id
+            CALL sorted_list__find(axis_id,hash(Pt_field%axis%name),ioipsl_axis_id,found)
+            CALL histdef(ioipsl_file_id, TRIM(pt_field%name), pt_field%description,          &
+                       & pt_field%unit, pt_field%grid%domain%ni, pt_field%grid%domain%nj,    &
+                       & ioipsl_hori_id, pt_field%axis%size, 1, pt_field%axis%size,          &
+                       & ioipsl_axis_id, 32, pt_field%operation, real(pt_field%freq_op),     &
+                       & real(pt_file%output_freq) )
+          ENDIF
+        ENDDO
+        CALL histend(ioipsl_file_id)
+      ENDIF
+      CALL sorted_list__delete(axis_id)
+    ENDDO
+    
+    DEALLOCATE(axis_id)
+     
+  END SUBROUTINE Create_file_definition  
+
+
+
+   SUBROUTINE write_ioipsl_2d(varname,var)
+   USE ioipsl
+   USE xmlio
+   IMPLICIT NONE
+     CHARACTER(len=*),INTENT(IN) :: varname
+     REAL            ,INTENT(IN) :: var(:,:)
+     
+     TYPE(field_dep),POINTER :: pt_field_base
+     TYPE(field)    ,POINTER :: pt_field
+     INTEGER :: nindex(size(var))
+     INTEGER :: ioipsl_file_id
+     INTEGER :: pos
+     LOGICAL :: found
+     INTEGER :: i
+      
+     CALL sorted_list__find(sorted_id,hash(varname),pos,found)
+
+     IF (found) THEN
+       pt_field_base=>field_id%at(pos)%pt
+     
+       DO i=1,pt_field_base%field_out%size
+         pt_field=>pt_field_base%field_out%at(i)%pt%field
+         IF ( pt_field%zoom%ni_loc * pt_field%zoom%nj_loc > 0) THEN           
+           ioipsl_file_id=pt_field%internal(id_file)
+           CALL histwrite(ioipsl_file_id, TRIM(pt_field%name), timestep_number, var, size(var), nindex)
+         ENDIF
+       ENDDO
+     ENDIF
+     
+   END SUBROUTINE write_ioipsl_2d
+       
+     
+   SUBROUTINE write_ioipsl_3d(varname,var)
+   USE ioipsl
+   USE xmlio
+   IMPLICIT NONE
+     CHARACTER(len=*),INTENT(IN) :: varname
+     REAL            ,INTENT(IN) :: var(:,:,:)
+     
+     TYPE(field_dep),POINTER :: pt_field_base
+     TYPE(field)    ,POINTER :: pt_field
+     INTEGER :: nindex(size(var))
+     INTEGER :: ioipsl_file_id
+     INTEGER :: pos
+     LOGICAL :: found
+     INTEGER :: i
+        
+     CALL sorted_list__find(sorted_id,hash(varname),pos,found)
+
+     IF (found) THEN
+       pt_field_base=>field_id%at(pos)%pt
+     
+       DO i=1,pt_field_base%field_out%size
+         pt_field=>pt_field_base%field_out%at(i)%pt%field
+         IF ( pt_field%zoom%ni_loc * pt_field%zoom%nj_loc > 0) THEN           
+           ioipsl_file_id=pt_field%internal(id_file)
+           CALL histwrite(ioipsl_file_id, TRIM(pt_field%name), timestep_number, var, size(var), nindex)
+         ENDIF
+       ENDDO
+     ENDIF
+   END SUBROUTINE write_ioipsl_3d
+           
+
+  SUBROUTINE set_timestep(timestep_nb0)
+  USE xmlio
+  IMPLICIT NONE
+    INTEGER,INTENT(IN) :: timestep_nb0
+     
+    timestep_number=timestep_nb0
+
+  END SUBROUTINE set_timestep
+
+
+  SUBROUTINE set_ioipsl_domain_id(pt_grid, nb_server,server_rank,domain_id)
+  USE xmlio
+  USE mod_ioserver_para
+  USE ioipsl
+  IMPLICIT NONE
+    TYPE(grid), POINTER :: pt_grid
+    INTEGER,INTENT(IN)  :: nb_server
+    INTEGER,INTENT(IN)  :: server_rank
+    INTEGER,INTENT(OUT) :: domain_id
+    TYPE(domain), POINTER :: pt_domain
+               
+    INTEGER,DIMENSION(2) :: ddid
+    INTEGER,DIMENSION(2) :: dsg
+    INTEGER,DIMENSION(2) :: dsl
+    INTEGER,DIMENSION(2) :: dpf
+    INTEGER,DIMENSION(2) :: dpl
+    INTEGER,DIMENSION(2) :: dhs
+    INTEGER,DIMENSION(2) :: dhe 
+    
+    pt_domain=>pt_grid%domain
+
+    ddid = (/ 1,2 /)
+    dsg  = (/ pt_grid%ni, pt_grid%nj /)
+    dsl  = (/ pt_domain%ni, pt_domain%nj /)
+    dpf  = (/ pt_domain%ibegin,pt_domain%jbegin /)
+    dpl  = (/ pt_domain%iend, pt_domain%jend /)
+    dhs  = (/ 0,0 /)
+    dhe  = (/ 0,0 /)
+    
+    call flio_dom_set(nb_server,server_rank,ddid,dsg,dsl,dpf,dpl,dhs,dhe, &
+                      'BOX',domain_id)
+  
+  END SUBROUTINE set_ioipsl_domain_id
+
+
+  SUBROUTINE ioipsl_finalize
+  USE ioipsl
+  IMPLICIT NONE
+
+    CALL histclo
+    
+  END SUBROUTINE ioipsl_finalize
+  
+END MODULE mod_interface_ioipsl
Index: /vendors/XMLIO_SERVER/current/src/IOSERVER/mod_ioclient.f90
===================================================================
--- /vendors/XMLIO_SERVER/current/src/IOSERVER/mod_ioclient.f90	(revision 1897)
+++ /vendors/XMLIO_SERVER/current/src/IOSERVER/mod_ioclient.f90	(revision 1897)
@@ -0,0 +1,61 @@
+MODULE mod_ioclient
+
+
+CONTAINS
+
+  SUBROUTINE init_ioclient(NEW_COMM)
+  USE mod_ioclient_para
+  USE mod_mpi_buffer_client
+  USE mod_wait
+  USE mod_ioserver_namelist
+  USE mod_event_client
+  USE iomanager
+  USE mpi_mod
+  IMPLICIT NONE
+    INTEGER, INTENT(INOUT),OPTIONAL :: NEW_COMM
+
+    INTEGER :: Comm
+    INTEGER :: nb_server
+    INTEGER :: rank
+    INTEGER :: ierr
+    LOGICAL :: init
+ 
+    CALL read_namelist
+
+    IF (using_mpi) THEN
+      IF (using_server) THEN
+        CALL Init_parallel
+        CALL Init_mpi_buffer
+        CALL Init_wait
+        IF (PRESENT(NEW_COMM)) THEN
+          NEW_COMM=intracomm
+        ENDIF
+      ELSE
+        CALL MPI_INITIALIZED(init,ierr)
+        IF (init) THEN
+          IF (.NOT. PRESENT(NEW_COMM)) THEN
+             Comm=MPI_COMM_WORLD
+          ELSE
+            Comm=New_Comm
+          ENDIF
+        ELSE
+          CALL MPI_INIT(ierr)
+          Comm=MPI_COMM_WORLD
+          
+          IF (PRESENT(NEW_COMM)) THEN
+            New_Comm=MPI_COMM_WORLD
+          ENDIF
+        ENDIF  
+        CALL MPI_COMM_SIZE(Comm,nb_server,ierr)     
+        CALL MPI_COMM_RANK(Comm,rank,ierr)
+        CALL iom__init(1,nb_server,rank)
+        CALL iom__set_current_rank(1)
+      ENDIF
+    ELSE
+      CALL iom__init(1,1,0)
+      CALL iom__set_current_rank(1)
+    ENDIF
+    
+  END SUBROUTINE init_ioclient
+
+END MODULE mod_ioclient
Index: /vendors/XMLIO_SERVER/current/src/IOSERVER/mod_ioclient_para.F90
===================================================================
--- /vendors/XMLIO_SERVER/current/src/IOSERVER/mod_ioclient_para.F90	(revision 1897)
+++ /vendors/XMLIO_SERVER/current/src/IOSERVER/mod_ioclient_para.F90	(revision 1897)
@@ -0,0 +1,89 @@
+  MODULE mod_ioclient_para
+    INTEGER,PARAMETER :: color_client=1
+    INTEGER,PARAMETER :: color_server=2 
+    INTEGER,SAVE      :: iocomm
+    INTEGER,SAVE      :: iosize
+    INTEGER,SAVE      :: iorank
+    INTEGER,SAVE      :: server_rank
+    INTEGER,SAVE      :: intracomm 
+  CONTAINS
+  
+  
+  SUBROUTINE Init_parallel
+  USE mpitrace
+  USE mod_ioserver_namelist
+#ifdef USE_OASIS
+  USE mod_prism_get_comm  
+#endif
+  USE mpi_mod
+  IMPLICIT NONE
+    INTEGER :: NEW_COMM
+    INTEGER :: ierr
+    INTEGER :: global_rank
+    INTEGER :: global_size
+    INTEGER :: mpi_rank
+    INTEGER :: mpi_size
+    INTEGER :: nb_server_io  
+    INTEGER,ALLOCATABLE :: proc_color(:) 
+    INTEGER :: i
+    INTEGER :: div,remain
+    INTEGER :: group_color
+    INTEGER :: Comm_client_server
+    CHARACTER(LEN=6) :: oasis_server_id
+    
+    IF (using_oasis) THEN
+      oasis_server_id=server_id
+      PRINT *,'prism_get_intracomm'
+#ifdef USE_OASIS
+      CALL prism_get_intracomm(Comm_client_server,oasis_server_id,ierr)
+#endif
+    ELSE
+      CALL MPI_INIT(ierr)
+      Comm_client_server=MPI_COMM_WORLD
+    ENDIF
+
+    CALL MPI_COMM_RANK(Comm_client_server,global_rank,ierr)
+    CALL MPI_COMM_SIZE(Comm_client_server,global_size,ierr)
+
+    CALL MPI_COMM_SPLIT(Comm_client_server,color_client,global_rank,intracomm,ierr)
+    CALL MPI_COMM_SIZE(intracomm,mpi_size,ierr)
+    CALL MPI_COMM_RANK(intracomm,mpi_rank,ierr)
+
+    nb_server_io=global_size-mpi_size
+    div=mpi_size/nb_server_io
+    remain=MOD(mpi_size,nb_server_io)
+    
+    IF (mpi_rank<remain*(div+1)) THEN
+      group_color=mpi_rank/(div+1)
+    ELSE
+      group_color=(nb_server_io-1)-(mpi_size-1-mpi_rank)/div
+    ENDIF
+
+    CALL MPI_COMM_SPLIT(Comm_client_server,group_color,global_rank,iocomm,ierr)
+    
+    CALL MPI_COMM_SIZE(iocomm,iosize,ierr)
+    CALL MPI_COMM_RANK(iocomm,iorank,ierr)
+
+    ALLOCATE(proc_color(0:iosize-1))
+    CALL MPI_ALLGATHER(color_client,1,MPI_INTEGER,proc_color,1,MPI_INTEGER,iocomm,ierr)
+    
+    DO i=0,iosize-1
+      IF (proc_color(i)==color_server) THEN
+        server_rank=i
+        EXIT
+      ENDIF
+    ENDDO
+    
+    PRINT *,"Proces No",mpi_rank,"--> server",server_rank
+  END SUBROUTINE Init_parallel
+  
+  SUBROUTINE Finalize_parallel
+  USE mpi_mod
+  IMPLICIT NONE
+    INTEGER :: ierr
+    
+    CALL MPI_FINALIZE(ierr)
+
+  END SUBROUTINE Finalize_parallel
+  
+  END MODULE mod_ioclient_para
Index: /vendors/XMLIO_SERVER/current/src/IOSERVER/mod_iomanager.f90
===================================================================
--- /vendors/XMLIO_SERVER/current/src/IOSERVER/mod_iomanager.f90	(revision 1897)
+++ /vendors/XMLIO_SERVER/current/src/IOSERVER/mod_iomanager.f90	(revision 1897)
@@ -0,0 +1,435 @@
+MODULE iomanager
+  INTEGER,PRIVATE,SAVE :: nb_client
+  INTEGER,PRIVATE,SAVE :: nb_server
+  INTEGER,PRIVATE,SAVE :: server_rank
+  INTEGER,PRIVATE,SAVE :: current_rank
+  
+CONTAINS
+
+  SUBROUTINE iom__init(nb_client_,nb_server_,server_rank_)
+  IMPLICIT NONE
+   INTEGER,INTENT(IN) :: nb_client_
+   INTEGER,INTENT(IN) :: nb_server_
+   INTEGER,INTENT(IN) :: server_rank_
+   
+     nb_client=nb_client_ 
+     nb_server=nb_server_
+     server_rank=server_rank_
+     
+  END SUBROUTINE iom__init
+ 
+  SUBROUTINE iom__parse_xml_file(filename)
+  USE xmlio
+  IMPLICIT NONE
+    CHARACTER(LEN=*) :: filename
+    
+    IF (current_rank==nb_client) CALL xmlio__init(filename)
+     
+  END SUBROUTINE iom__parse_xml_file
+   
+  SUBROUTINE iom__swap_context(id)
+  USE xmlio
+  IMPLICIT NONE
+    CHARACTER(LEN=*) :: id
+    
+    IF (current_rank==nb_client) CALL context__swap(id)
+     
+  END SUBROUTINE iom__swap_context
+
+  SUBROUTINE iom__set_current_rank(rank)
+  IMPLICIT NONE
+    INTEGER,INTENT(IN) :: rank
+    
+    current_rank=rank
+  
+  END SUBROUTINE iom__set_current_rank
+  
+  SUBROUTINE iom__set_vert_axis(name,vert_value)
+  USE xmlio
+  IMPLICIT NONE
+    CHARACTER(LEN=*),INTENT(IN) :: name
+    REAL,INTENT(IN)             :: vert_value(:)
+    TYPE(axis), POINTER :: pt_axis
+    
+    IF (current_rank==nb_client) THEN
+      CALL axis__get(name, pt_axis)
+      CALL axis__set(pt_axis, a_size=size(vert_value), values=vert_value)
+    ENDIF
+ 
+  END SUBROUTINE iom__set_vert_axis
+
+ 
+  SUBROUTINE iom__set_grid_dimension(name,ni_glo,nj_glo)
+  USE xmlio
+  IMPLICIT NONE
+    CHARACTER(LEN=*),INTENT(IN) :: name
+    INTEGER,INTENT(IN) :: ni_glo
+    INTEGER,INTENT(IN) :: nj_glo
+    TYPE(grid), POINTER :: pt_grid
+  
+    IF (current_rank==nb_client) THEN
+      CALL grid__get(name,pt_grid)
+      CALL grid__set_dimension(pt_grid,ni_glo,nj_glo)
+    ENDIF
+
+  END SUBROUTINE iom__set_grid_dimension
+  
+  SUBROUTINE iom__set_grid_domain(name,ni,nj,ibegin,jbegin,lon,lat)
+  USE xmlio
+  IMPLICIT NONE
+    CHARACTER(LEN=*),INTENT(IN) :: name
+    INTEGER,INTENT(IN) :: ni
+    INTEGER,INTENT(IN) :: nj
+    INTEGER,INTENT(IN) :: ibegin
+    INTEGER,INTENT(IN) :: jbegin
+    REAL,INTENT(IN)    :: lon(ni,nj)
+    REAL,INTENT(IN)    :: lat(ni,nj)
+
+    TYPE(grid),   POINTER :: pt_grid
+    TYPE(domain), POINTER :: pt_domain
+
+      CALL grid__get(name,pt_grid)
+      CALL grid__get_new_subdomain(pt_grid,current_rank,pt_domain)
+      CALL domain__set(pt_domain,current_rank,ni,nj,ibegin,jbegin,lon,lat)
+
+  END SUBROUTINE iom__set_grid_domain
+
+  SUBROUTINE iom__set_grid_type_nemo(name)
+  USE xmlio
+  IMPLICIT NONE
+    CHARACTER(LEN=*),INTENT(IN) :: name
+
+    TYPE(grid),   POINTER :: pt_grid
+    TYPE(domain), POINTER :: pt_domain
+      
+      CALL grid__get(name,pt_grid)
+      CALL grid__get_subdomain(pt_grid,current_rank,pt_domain)
+      CALL domain__set_type_box(pt_domain)
+
+  END SUBROUTINE iom__set_grid_type_nemo
+
+  SUBROUTINE iom__set_grid_type_lmdz(name,nbp,offset)
+  USE xmlio
+  IMPLICIT NONE
+    CHARACTER(LEN=*),INTENT(IN) :: name
+    INTEGER,INTENT(IN)          :: nbp
+    INTEGER,INTENT(IN)          :: offset
+
+    TYPE(grid),   POINTER :: pt_grid
+    TYPE(domain), POINTER :: pt_domain
+    LOGICAL,ALLOCATABLE   :: mask(:,:)
+      
+      CALL grid__get(name,pt_grid)
+      CALL grid__get_subdomain(pt_grid,current_rank,pt_domain)
+      ALLOCATE(mask(pt_domain%ni,pt_domain%nj))
+      mask(:,:)=.TRUE.
+      mask(1:offset,1)=.FALSE.
+      mask(MOD(offset+nbp-1,pt_domain%ni)+2:pt_domain%ni,pt_domain%nj)=.FALSE.
+      CALL domain__set_type_box(pt_domain,mask)
+
+  END SUBROUTINE iom__set_grid_type_lmdz
+      
+  SUBROUTINE iom__set_time_parameters(itau0,zjulian,zdt)
+  USE mod_interface_ioipsl
+  IMPLICIT NONE
+    INTEGER, INTENT(IN) :: itau0
+    REAL,INTENT(IN)     :: zjulian
+    REAL,INTENT(IN)     :: zdt
+      
+    IF (current_rank==nb_client) THEN
+      CALL set_time_parameters(itau0, zjulian, zdt)
+    ENDIF
+  END SUBROUTINE iom__set_time_parameters
+  
+  SUBROUTINE iom__close_io_definition
+  USE mod_interface_ioipsl
+  IMPLICIT NONE
+  
+    IF (current_rank==nb_client) CALL Create_file_definition(nb_server,server_rank)
+  
+  END SUBROUTINE iom__close_io_definition
+      
+
+  SUBROUTINE iom__set_timestep(timestep)
+  USE mod_interface_ioipsl
+  IMPLICIT NONE
+    INTEGER, INTENT(IN) :: timestep
+    
+    IF (current_rank==nb_client) CALL set_timestep(timestep)
+    
+  END SUBROUTINE iom__set_timestep
+
+  SUBROUTINE iom__set_calendar(str_calendar)
+  USE mod_interface_ioipsl
+  IMPLICIT NONE
+    CHARACTER(LEN=*) :: str_calendar
+    
+    IF (current_rank==nb_client) CALL set_calendar(str_calendar)
+    
+  END SUBROUTINE iom__set_calendar
+
+  SUBROUTINE iom__enable_field(varname)
+  USE xmlio
+  IMPLICIT NONE
+    CHARACTER(LEN=*) :: varname
+    TYPE(field),POINTER :: pt_field
+    
+    CALL field__get(TRIM(varname), pt_field)
+    CALL field__set(pt_field,enabled=.TRUE.)
+    
+  END SUBROUTINE iom__enable_field
+  
+  SUBROUTINE iom__disable_field(varname)
+  USE xmlio
+  IMPLICIT NONE
+    CHARACTER(LEN=*) :: varname
+    TYPE(field),POINTER :: pt_field
+    
+    CALL field__get(TRIM(varname), pt_field)
+    CALL field__set(pt_field,enabled=.FALSE.)
+    
+  END SUBROUTINE iom__disable_field
+   
+
+  SUBROUTINE iom__write_field1d(varname,var)
+  USE xmlio
+  USE field_bufferize
+  USE mod_interface_ioipsl
+  IMPLICIT NONE
+    CHARACTER(LEN=*) :: varname
+    REAL             :: var(:)
+
+    TYPE(field),POINTER  :: pt_field
+    TYPE(domain),POINTER :: subdomain
+    TYPE(domain),POINTER :: local_domain
+    INTEGER :: ni,nj,ibegin,jbegin
+    INTEGER :: id_rank
+    
+    CALL field__get(varname,pt_field)
+    id_rank=pt_field%grid%ranks(current_rank)
+    local_domain=>pt_field%grid%domain
+    
+    subdomain=>pt_field%grid%subdomain%at(id_rank)%pt
+    ni=subdomain%ni
+    nj=subdomain%nj
+    ibegin=subdomain%ibegin-local_domain%ibegin+1
+    jbegin=subdomain%jbegin-local_domain%jbegin+1 
+
+    IF (subdomain%type==box) THEN
+
+      WRITE(message,*) 'Field must have 2 or 3 dimensions for box domain. There, it have only one.' 
+      CALL error("iom__write_field2d")
+
+    ELSE IF (subdomain%type==orange) THEN
+      IF (size(var,1)/=subdomain%nbp) THEN 
+         WRITE(message,*) 'Field dimensions are not compliant with the associated grid ',  &
+                          'field nbp :',size(var,1),'   grid nbp :',subdomain%nbp
+         CALL error("iom__write_field2d")
+      ENDIF
+      IF (pt_field%axis%name /= 'none') THEN
+        WRITE(message,*) "Missing axis dimension for this field"
+        CALL error("iom__write_field2d")
+      ENDIF
+    ENDIF
+    
+    
+    IF (current_rank==1) THEN
+      CALL init_field_bufferize(local_domain%ni,local_domain%nj,1)
+    ENDIF
+    
+    CALL bufferize_field(ni,ibegin,nj,jbegin,1,1,subdomain%nbp,var,         &
+                         subdomain%i_index,subdomain%j_index,subdomain%mask)
+    
+    IF (current_rank==nb_client) THEN
+      ni=local_domain%ni
+      nj=local_domain%nj
+      CALL write_ioipsl_2d(varname,Field_buffer(1:ni,1:nj,1))
+    ENDIF
+    
+  END SUBROUTINE iom__write_field1d
+
+   
+  SUBROUTINE iom__write_field2d(varname,var)
+  USE xmlio
+  USE field_bufferize
+  USE mod_interface_ioipsl
+  IMPLICIT NONE
+    CHARACTER(LEN=*) :: varname
+    REAL             :: var(:,:)
+
+    TYPE(field),POINTER  :: pt_field
+    TYPE(domain),POINTER :: subdomain
+    TYPE(domain),POINTER :: local_domain
+    INTEGER :: ni,nj,nk,ibegin,jbegin
+    INTEGER :: id_rank
+    
+    CALL field__get(varname,pt_field)
+    id_rank=pt_field%grid%ranks(current_rank)
+    local_domain=>pt_field%grid%domain
+    
+    subdomain=>pt_field%grid%subdomain%at(id_rank)%pt
+    ni=subdomain%ni
+    nj=subdomain%nj
+    ibegin=subdomain%ibegin-local_domain%ibegin+1
+    jbegin=subdomain%jbegin-local_domain%jbegin+1 
+    nk=pt_field%axis%size
+
+    IF (subdomain%type==box) THEN
+      IF (size(var,1)/=ni .OR. size(var,2)/=nj) THEN
+        WRITE(message,*) 'Field dimensions are not compliant with the associated grid ',  &
+                          'field dim :',size(var,1),',',size(var,2),'   grid dim',ni,',',nj
+        CALL error("iom__write_field2d")
+      ENDIF
+      
+      IF (pt_field%axis%name/="none") THEN
+        WRITE(message,*) "Missing axis dimension for this field"
+        CALL error("iom__write_field2d")
+      ENDIF
+    
+    ELSE IF (subdomain%type==orange) THEN
+      IF (size(var,1)/=subdomain%nbp) THEN 
+         WRITE(message,*) 'Field dimensions are not compliant with the associated grid ',  &
+                          'field nbp :',size(var,1),'   grid nbp : ',subdomain%nbp
+         CALL error("iom__write_field2d")
+      ENDIF
+      IF (nk /= size(var,2)) THEN
+         WRITE(message,*) 'Field dimensions are not compliant with the associated axis', &
+                          'field dim :',size(var,2),'   axis dim :', nk
+         CALL error("iom__write_field2d")
+      ENDIF
+    ENDIF
+    
+    
+    IF (current_rank==1) THEN
+      CALL init_field_bufferize(local_domain%ni,local_domain%nj,nk)
+    ENDIF
+    
+    CALL bufferize_field(ni,ibegin,nj,jbegin,nk,1,subdomain%nbp,var,         &
+                         subdomain%i_index,subdomain%j_index,subdomain%mask)
+    
+    IF (current_rank==nb_client) THEN
+      ni=local_domain%ni
+      nj=local_domain%nj
+      
+      IF (pt_field%axis%name=="none") THEN
+        CALL write_ioipsl_3d(varname,Field_buffer(1:ni,1:nj,1:nk))
+      ELSE 
+        CALL write_ioipsl_2d(varname,Field_buffer(1:ni,1:nj,1))
+      ENDIF
+    
+    ENDIF
+    
+  END SUBROUTINE iom__write_field2d
+
+  SUBROUTINE iom__write_field3d(varname,var)
+  USE xmlio
+  USE field_bufferize
+  USE mod_interface_ioipsl
+  IMPLICIT NONE
+    CHARACTER(LEN=*) :: varname
+    REAL             :: var(:,:,:)
+
+    TYPE(field),POINTER  :: pt_field
+    TYPE(domain),POINTER :: subdomain
+    TYPE(domain),POINTER :: local_domain
+    INTEGER :: ni,nj,nk,ibegin,jbegin
+    INTEGER :: id_rank
+
+    CALL field__get(varname,pt_field)
+    id_rank=pt_field%grid%ranks(current_rank)
+    local_domain=>pt_field%grid%domain
+    
+    subdomain=>pt_field%grid%subdomain%at(id_rank)%pt
+    ni=subdomain%ni
+    nj=subdomain%nj
+    ibegin=subdomain%ibegin-local_domain%ibegin+1
+    jbegin=subdomain%jbegin-local_domain%jbegin+1 
+    nk=pt_field%axis%size
+
+    IF (subdomain%type==box) THEN
+      IF (size(var,1)/=ni .OR. size(var,2)/=nj) THEN
+        WRITE(message,*) 'Field dimensions are not compliant with the associated grid ',  &
+                          'field dim :',size(var,1),',',size(var,2),'   grid dim',ni,',',nj
+        CALL error("iom__write_field3d")
+      ENDIF
+      
+      IF (pt_field%axis%name=='none' .OR. nk/=size(var,3)) THEN
+        WRITE(message,*) 'Field dimension is not compliant with the associated axis : ', &
+                         'field dim : ',size(var,3),'  axis dim : ',nk
+        CALL error("iom__write_field3d")
+      ENDIF
+
+    ELSE IF (subdomain%type==orange) THEN
+
+      WRITE(message,*) 'Field have too much dimensions for box domain. There, it has 3.' 
+      CALL error("iom__write_field3d")
+      
+    ENDIF
+    
+    
+    IF (current_rank==1) THEN
+      CALL init_field_bufferize(local_domain%ni,local_domain%nj,nk)
+    ENDIF
+    
+    CALL bufferize_field(ni,ibegin,nj,jbegin,nk,1,subdomain%nbp,var,         &
+                         subdomain%i_index,subdomain%j_index,subdomain%mask)
+    
+    IF (current_rank==nb_client) THEN
+      ni=local_domain%ni
+      nj=local_domain%nj
+      
+      CALL write_ioipsl_3d(varname,Field_buffer(1:ni,1:nj,1:nk))
+    
+    ENDIF
+    
+  END SUBROUTINE iom__write_field3d
+ 
+  SUBROUTINE iom__Finalize
+  USE mod_interface_ioipsl
+  IMPLICIT NONE
+  
+    IF (current_rank==nb_client) CALL ioipsl_finalize
+    
+  END SUBROUTINE iom__Finalize
+
+
+  SUBROUTINE iom__set_attribut(id,attrib)
+  USE mod_attribut
+  USE mod_object
+  USE mod_field
+  USE mod_field_group
+  USE mod_file
+  USE mod_file_group
+  USE mod_axis
+  USE mod_axis_group
+  USE mod_grid
+  USE mod_grid_group
+  USE mod_zoom
+  IMPLICIT NONE
+    CHARACTER(LEN=*) :: id
+    TYPE(attribut)   :: attrib  
+    LOGICAL          :: success
+    IF (current_rank==nb_client) THEN
+    
+      SELECT CASE(attrib%object)
+        CASE(field_object)
+          CALL field_group__set_attribut(id,attrib,success)
+          IF (.NOT. success) CALL field__set_attribut(id,attrib,success)         
+        CASE(file_object)
+          CALL file_group__set_attribut(id,attrib,success)
+          IF (.NOT. success) CALL file__set_attribut(id,attrib,success)         
+        CASE(axis_object)
+          CALL axis_group__set_attribut(id,attrib,success)
+          IF (.NOT. success) CALL axis__set_attribut(id,attrib,success)         
+        CASE(grid_object)
+          CALL grid_group__set_attribut(id,attrib,success)
+          IF (.NOT. success) CALL grid__set_attribut(id,attrib,success)         
+        CASE(zoom_object)
+          CALL zoom__set_attribut(id,attrib,success)
+      END SELECT
+    ENDIF
+    
+  END SUBROUTINE iom__set_attribut
+   
+END MODULE iomanager 
+ 
Index: /vendors/XMLIO_SERVER/current/src/IOSERVER/mod_ioserver_namelist.f90
===================================================================
--- /vendors/XMLIO_SERVER/current/src/IOSERVER/mod_ioserver_namelist.f90	(revision 1897)
+++ /vendors/XMLIO_SERVER/current/src/IOSERVER/mod_ioserver_namelist.f90	(revision 1897)
@@ -0,0 +1,61 @@
+MODULE mod_ioserver_namelist
+
+  LOGICAL,SAVE :: using_server
+  LOGICAL,SAVE :: using_oasis
+  CHARACTER(LEN=100),SAVE :: client_id
+  CHARACTER(LEN=100),SAVE :: server_id
+  NAMELIST /coupling_param/ using_server,using_oasis,client_id,server_id  
+
+  INTEGER,SAVE :: global_mpi_buffer_size            
+  NAMELIST /mpi_param/ global_mpi_buffer_size  
+
+  INTEGER,PARAMETER,PRIVATE :: starting_unit=356
+  
+CONTAINS
+
+  SUBROUTINE set_default_namelist
+  IMPLICIT NONE
+  
+    using_server=.FALSE.
+    using_oasis=.FALSE.
+    client_id='unknown'
+    server_id='unknown'
+    global_mpi_buffer_size=512
+    
+  END SUBROUTINE set_default_namelist
+  
+    
+  SUBROUTINE read_namelist
+  IMPLICIT NONE
+    LOGICAL :: opened
+    INTEGER :: unit
+    INTEGER :: ierr
+
+    CALL set_default_namelist   
+    unit=starting_unit
+    opened=.TRUE.
+    DO WHILE (opened) 
+      unit=unit+1
+      INQUIRE(unit,OPENED=opened)
+    ENDDO
+      
+    OPEN(UNIT=unit,FILE='xmlio_server.def',STATUS='old',IOSTAT=ierr)
+    
+    
+    IF (ierr==0) THEN
+      READ(unit,nml=coupling_param)
+      READ(unit,nml=mpi_param)
+      global_mpi_buffer_size=global_mpi_buffer_size*1024*128  
+      CLOSE(unit)
+    ELSE
+      PRINT *,'WARNING : mod_ioserver::read_namelist : file xmlio_server.def is absent', &
+              ' ---> using default parameter'
+    ENDIF 
+    
+    
+    PRINT *,'namelist read --> ',using_server,using_oasis,client_id,server_id
+    
+  END SUBROUTINE read_namelist
+
+
+END MODULE mod_ioserver_namelist 
Index: /vendors/XMLIO_SERVER/current/src/IOSERVER/mod_ioserver_para.F90
===================================================================
--- /vendors/XMLIO_SERVER/current/src/IOSERVER/mod_ioserver_para.F90	(revision 1897)
+++ /vendors/XMLIO_SERVER/current/src/IOSERVER/mod_ioserver_para.F90	(revision 1897)
@@ -0,0 +1,102 @@
+  MODULE mod_ioserver_para
+    INTEGER,PARAMETER :: color_client=1
+    INTEGER,PARAMETER :: color_server=2 
+
+    INTEGER,SAVE      :: iocomm
+    INTEGER,SAVE      :: iosize
+    INTEGER,SAVE      :: iorank
+    
+    INTEGER,SAVE      :: mpi_rank
+    INTEGER,SAVE      :: mpi_size
+    INTEGER,SAVE      :: mpi_master
+    LOGICAL,SAVE      :: is_mpi_master
+  
+    INTEGER,SAVE      :: nb_client
+    INTEGER,ALLOCATABLE,SAVE      :: client_rank(:)
+    INTEGER,SAVE      :: intracomm 
+  CONTAINS
+  
+  
+  SUBROUTINE Init_parallel
+  USE mpitrace
+  USE mod_ioserver_namelist
+#ifdef USE_OASIS
+  USE mod_prism_get_comm 
+#endif 
+  USE mpi_mod
+  IMPLICIT NONE
+    INTEGER :: ierr
+    INTEGER :: global_rank
+    INTEGER :: global_size
+    INTEGER,ALLOCATABLE :: proc_color(:)
+    INTEGER :: i
+    INTEGER :: group_color
+    INTEGER :: Comm_client_server
+    INTEGER :: comp_id
+    CHARACTER(LEN=6) :: oasis_server_id, oasis_client_id
+
+    IF (using_oasis) THEN
+       oasis_server_id=server_id
+       oasis_client_id=client_id
+#ifdef USE_OASIS
+       CALL prism_init_comp_proto (comp_id, oasis_server_id, ierr)
+       CALL prism_get_intracomm(Comm_client_server,oasis_client_id,ierr)
+#endif
+    ELSE
+      CALL MPI_INIT(ierr)
+      Comm_client_server=MPI_COMM_WORLD
+    ENDIF
+        
+    CALL MPI_COMM_RANK(Comm_client_server,global_rank,ierr)
+    CALL MPI_COMM_SIZE(Comm_client_server,global_size,ierr)
+       
+    CALL MPI_COMM_SPLIT(Comm_client_server,color_server,global_rank,intracomm,ierr)
+    CALL MPI_COMM_SIZE(intracomm,mpi_size,ierr)
+    CALL MPI_COMM_RANK(intracomm,mpi_rank,ierr)
+    
+    group_color=mpi_rank
+    PRINT *,'group_color',group_color
+
+    CALL MPI_COMM_SPLIT(Comm_client_server,group_color,global_rank,iocomm,ierr)    
+    
+    CALL MPI_COMM_SIZE(iocomm,iosize,ierr)
+    CALL MPI_COMM_RANK(iocomm,iorank,ierr)
+
+    PRINT *,"io_size-> ",iosize,"iorank-> ",iorank
+    
+    ALLOCATE(proc_color(0:iosize-1))
+    CALL MPI_ALLGATHER(color_server,1,MPI_INTEGER,proc_color,1,MPI_INTEGER,iocomm,ierr)
+    print *,"proc_color -> ",proc_color
+    
+    ALLOCATE(client_rank(iosize-1))
+    nb_client=0
+    DO i=0,iosize-1
+      IF (proc_color(i)==color_client) THEN
+        nb_client=nb_client+1
+        client_rank(nb_client)=i
+      ENDIF
+    ENDDO
+
+    PRINT *,"Proces No",mpi_rank,"--> client ",client_rank
+  END SUBROUTINE Init_parallel
+  
+  SUBROUTINE Finalize_parallel
+  USE mod_ioserver_namelist
+#ifdef USE_OASIS
+  USE mod_prism_proto
+#endif
+  USE mpi_mod
+  IMPLICIT NONE
+    INTEGER :: ierr
+    
+    IF (using_oasis) THEN
+#ifdef USE_OASIS
+      CALL prism_terminate_proto(ierr)
+#endif
+    ELSE
+      CALL MPI_FINALIZE(ierr)
+    ENDIF
+    
+  END SUBROUTINE Finalize_parallel
+
+END MODULE mod_ioserver_para
Index: /vendors/XMLIO_SERVER/current/src/IOSERVER/mod_mpi_buffer_client.f90
===================================================================
--- /vendors/XMLIO_SERVER/current/src/IOSERVER/mod_mpi_buffer_client.f90	(revision 1897)
+++ /vendors/XMLIO_SERVER/current/src/IOSERVER/mod_mpi_buffer_client.f90	(revision 1897)
@@ -0,0 +1,202 @@
+MODULE mod_mpi_buffer_client
+  USE mod_mpi_buffer_parameters
+  USE mpi, ONLY : status_size=>MPI_STATUS_SIZE
+  
+  INTEGER(KIND=8),POINTER :: MPI_Buffer(:)
+  
+  TYPE mpi_requests
+    INTEGER :: request
+    INTEGER :: status(status_size)
+    INTEGER :: Pos
+  END TYPE mpi_requests
+  
+  TYPE(mpi_requests),DIMENSION(max_request) :: pending_request
+  
+  INTEGER :: Buffer_pos
+  INTEGER :: request_pos
+  INTEGER :: buffer_begin
+  INTEGER :: request_begin
+  INTEGER :: nb_request_pending
+  INTEGER,SAVE :: start_pos
+  LOGICAL,SAVE :: ok_new_request
+  LOGICAL,SAVE :: is_last_request
+
+  INTEGER,SAVE      :: mpi_buffer_size
+  INTEGER,SAVE      :: aggregated_request
+
+CONTAINS
+
+  SUBROUTINE Init_mpi_buffer
+  USE mod_global_memory
+  USE mod_pack
+  USE mod_ioclient_para
+  IMPLICIT NONE
+
+  INTEGER  :: nb_client
+  
+    nb_client=iosize-1  
+    mpi_buffer_size=global_mpi_buffer_size/nb_client
+    
+    CALL allocate_global_memory(mpi_buffer_size,MPI_Buffer)
+    buffer_begin=1
+    request_begin=1
+    Buffer_pos=1
+    nb_request_pending=0
+    Request_pos=1
+    ok_new_request=.TRUE.
+    is_last_request=.FALSE.
+    aggregated_request=0
+    
+    CALL set_pack_buffer(MPI_Buffer,buffer_begin)
+    
+  END SUBROUTINE Init_mpi_buffer
+  
+
+  SUBROUTINE create_request(request_id)
+  USE mod_pack
+  USE mod_ioclient_para
+  USE mpitrace
+  USE mpi_mod
+  IMPLICIT NONE
+    INTEGER :: request_id
+    
+    CALL VTb(VTprocess_event)
+    IF (ok_new_request) THEN  
+      Pending_request(Request_pos)%Pos = pack_pos
+      ok_new_request=.FALSE.
+    ENDIF
+    start_pos=pack_pos
+    pack_pos=pack_pos+1
+!    PRINT *,"Pos in Buffer",Pending_request(Request_pos)%Pos,"pack_pos",pack_pos
+    CALL pack(request_id)
+  END SUBROUTINE create_request
+  
+  
+  SUBROUTINE Finalize_request
+  USE mod_pack
+  USE mod_ioclient_para
+  USE mpitrace
+  use mod_wait
+  USE mpi_mod
+  IMPLICIT NONE
+    INTEGER :: ierr
+    INTEGER :: message_size
+    INTEGER(KIND=8) :: request_size
+    INTEGER :: buffer_free
+    LOGICAL :: ok_out
+    LOGICAL :: is_Buffer_full
+    request_size=pack_pos-start_pos    
+    pack_buffer(start_pos)=request_size
+    message_size=pack_pos-Pending_request(Request_pos)%Pos
+    aggregated_request=aggregated_request+1
+
+
+!! ICI verifier que le buffer ne se recouvre pas ainsi que les requetes
+    
+    ok_out=.FALSE.
+    is_buffer_full=.FALSE.
+    DO WHILE (.NOT. ok_out)
+      CALL check_request
+    
+      IF ( buffer_begin <= pack_pos) THEN
+        Buffer_free=mpi_buffer_size-pack_pos+1
+      ELSE
+        Buffer_free=buffer_begin-pack_pos
+      ENDIF
+      
+!      Print *,"message_size",message_size,"buffer_free",buffer_free
+!      PRINT *,"Request_pos",request_pos
+!      PRINT *,"Pos in Buffer",Pending_request(Request_pos)%Pos,"pack_pos",pack_pos
+      IF ( nb_request_pending==1 .AND. ( (buffer_free < MPI_buffer_size * 0.4) .OR. is_last_request .OR.  &
+                                         (aggregated_request>=max_request/2) )) THEN
+        ok_out=.FALSE.
+        CALL Wait_us(10)
+        IF (.NOT. is_buffer_full) THEN
+          CALL VTb(VTbuffer_full)
+        ENDIF      
+        is_Buffer_full=.TRUE.
+        
+      ELSE
+        ok_out=.TRUE.
+        IF (is_buffer_full) THEN
+          CALL VTe(VTbuffer_full)
+        ENDIF
+        is_buffer_full=.FALSE.
+      
+      ENDIF
+      
+   ENDDO
+   
+   IF (nb_request_pending==0 .OR. (buffer_free < MPI_buffer_size* 0.4 ) .OR. (aggregated_request> max_request/2) ) THEN
+      
+     CALL MPI_ISSEND(MPI_Buffer(Pending_request(Request_pos)%Pos),message_size,MPI_INTEGER8,     &
+                    server_rank,tag_iocomm,iocomm,Pending_request(Request_pos)%request,ierr )
+    
+!    PRINT *,"Requete envoy�e !!!!" 
+!    PRINT *,"Message : ",MPI_Buffer(Pending_request(Request_pos)%Pos:Pending_request(Request_pos)%Pos+message_size-1)              
+      IF ( Pack_Pos > MPI_buffer_size*0.6 ) THEN
+        Pack_Pos=1
+      ENDIF
+    
+      IF (Request_Pos==max_request) THEN
+        Request_Pos=1
+      ELSE 
+        Request_Pos=Request_Pos+1
+      ENDIF
+      nb_request_pending=nb_request_pending+1
+    
+      ok_new_request=.TRUE.
+      aggregated_request=0
+    ENDIF
+    CALL VTe(VTprocess_event)    
+  END SUBROUTINE Finalize_request
+
+
+  SUBROUTINE Check_request
+  USE mpi_mod
+  IMPLICIT NONE
+  LOGICAL :: ok_out
+  LOGICAL :: OK_complete
+  INTEGER :: ierr
+  
+!    PRINT *, 'on entre dans Check_request'
+!    PRINT *, 'nb_request_pending',nb_request_pending
+    
+    IF (nb_request_pending>0) THEN
+      ok_out=.FALSE.
+    ELSE
+      ok_out=.TRUE.
+    ENDIF
+    
+    DO WHILE (.NOT. ok_out)
+    
+!      PRINT *,'Testing_request...'
+!      PRINT *,'request_begin',request_begin
+      CALL MPI_TEST(Pending_request(request_begin)%request,ok_complete,Pending_request(request_begin)%status,ierr)
+!      PRINT *,'Request has been tested...'
+      IF (ok_complete) THEN
+!        PRINT *,"Request_completed"
+        IF (Request_begin==max_request) THEN
+          Request_begin=1
+        ELSE
+          request_begin=request_begin+1
+        ENDIF
+        
+        buffer_begin=Pending_request(request_begin)%Pos
+        
+        nb_request_pending=nb_request_pending-1
+        
+        IF (nb_request_pending==0) THEN 
+          ok_out=.TRUE.
+        ELSE
+          ok_out=.FALSE.
+        ENDIF
+      ELSE
+        ok_out=.TRUE.
+      ENDIF
+    
+    ENDDO
+!    PRINT *, 'on sort de Check_request'  
+  END SUBROUTINE Check_Request
+
+END MODULE mod_mpi_buffer_client
Index: /vendors/XMLIO_SERVER/current/src/IOSERVER/mod_mpi_buffer_parameters.f90
===================================================================
--- /vendors/XMLIO_SERVER/current/src/IOSERVER/mod_mpi_buffer_parameters.f90	(revision 1897)
+++ /vendors/XMLIO_SERVER/current/src/IOSERVER/mod_mpi_buffer_parameters.f90	(revision 1897)
@@ -0,0 +1,7 @@
+MODULE mod_mpi_buffer_parameters
+  USE mod_ioserver_namelist, ONLY : global_mpi_buffer_size
+  INTEGER,PARAMETER :: max_request = 10000
+  REAL, PARAMETER   :: frac_alert  = 0.9
+  INTEGER           :: tag_iocomm  = 4000
+  INTEGER           :: tag_terminate = 4001
+END MODULE mod_mpi_buffer_parameters
Index: /vendors/XMLIO_SERVER/current/src/IOSERVER/mod_mpi_buffer_server.f90
===================================================================
--- /vendors/XMLIO_SERVER/current/src/IOSERVER/mod_mpi_buffer_server.f90	(revision 1897)
+++ /vendors/XMLIO_SERVER/current/src/IOSERVER/mod_mpi_buffer_server.f90	(revision 1897)
@@ -0,0 +1,262 @@
+MODULE mod_mpi_buffer_server
+  USE mod_mpi_buffer_parameters
+
+  TYPE mpi_requests
+    INTEGER :: Pos
+    INTEGER :: size
+  END TYPE mpi_requests
+  
+  TYPE buffer
+    INTEGER(KIND=8),POINTER  :: mpi_buffer(:)
+    INTEGER :: pos
+    INTEGER :: begin
+    TYPE(mpi_requests),POINTER :: request(:)
+    INTEGER :: request_pos
+    INTEGER :: nb_request
+    INTEGER :: request_begin
+    INTEGER :: request_free
+    LOGICAL :: is_posted
+    LOGICAL :: is_terminated
+    INTEGER :: last_request
+  END TYPE buffer
+
+  TYPE(buffer),ALLOCATABLE,SAVE :: buffers(:)
+  
+  INTEGER,SAVE :: current_rank
+  INTEGER,SAVE :: mpi_buffer_size
+  
+CONTAINS
+  
+  SUBROUTINE Init_mpi_buffer
+  USE mod_ioserver_para
+  USE mod_global_memory
+  IMPLICIT NONE
+    INTEGER :: n
+    
+    ALLOCATE(buffers(nb_client))
+    mpi_buffer_size=global_mpi_buffer_size/nb_client 
+    DO n=1,nb_client
+      CALL allocate_global_memory(mpi_buffer_size,buffers(n)%MPI_Buffer)
+      buffers(n)%pos=1
+      buffers(n)%begin=1
+      ALLOCATE(buffers(n)%request(max_request))
+      buffers(n)%nb_request=0
+      buffers(n)%request_free=max_request
+      buffers(n)%request_pos=1
+      buffers(n)%request_begin=1
+      buffers(n)%is_posted=.FALSE.
+      buffers(n)%is_terminated=.FALSE.
+    ENDDO
+
+  END SUBROUTINE Init_mpi_buffer
+
+  SUBROUTINE Check_buffer
+  USE mod_ioserver_para
+  USE mpitrace
+  USE mpi_mod
+  IMPLICIT NONE
+    INTEGER :: n
+    INTEGER :: status(MPI_STATUS_SIZE)
+    LOGICAL :: ok_complete
+    LOGICAL :: ok_out
+    INTEGER :: ierr
+    INTEGER :: message_size
+    INTEGER :: Buffer_space 
+    INTEGER :: request
+    
+    CALL VTb(VTcheck_buffer)
+    DO n=1,nb_client
+      ok_out=.FALSE.
+      
+      DO WHILE (.NOT. ok_out)
+        
+        IF (buffers(n)%is_posted) THEN
+!          PRINT*,"MPI_TEST"
+!          PRINT *,"MPI_TEST LAST_REQUEST (avant)",buffers(n)%last_request,"ok_complete ?",ok_complete
+          CALL MPI_TEST(buffers(n)%last_request,ok_complete,status,ierr)
+!          PRINT *,"MPI_TEST LAST_REQUEST (apres)",buffers(n)%last_request,"ok_complete ?",ok_complete
+
+          IF (ok_complete) THEN
+            CALL MPI_GET_COUNT(status,MPI_INTEGER8,message_size,ierr)
+            CALL Fill_request(n,Buffers(n)%pos,message_size)
+            buffers(n)%is_posted=.FALSE.
+            buffers(n)%pos=buffers(n)%pos+message_size
+         
+!            PRINT *,"buffer_pos",buffers(n)%pos
+!            PRINT *,"Message recu de taille", message_size
+!              PRINT *,"Message : ",buffers(n)%mpi_buffer(buffers(n)%pos:buffers(n)%pos+message_size-1)
+!              PRINT *,"Nouvelle taille buffer_pos",buffers(n)%pos
+              ok_out=.FALSE.
+          ELSE
+              ok_out=.TRUE.
+          ENDIF
+       
+        ELSE  ! (.NOT. is_posted)        
+!          PRINT *,"MPI_IPROBE"
+     
+          CALL MPI_IPROBE(client_rank(n),tag_iocomm,iocomm,ok_complete,status,ierr)
+!          PRINT *,"Ok_complete.. ?",ok_complete
+          IF (ok_complete) THEN
+            CALL MPI_GET_COUNT(status,MPI_INTEGER8,message_size,ierr)
+!            PRINT *,"message_size",message_size
+            IF (buffers(n)%pos >= buffers(n)%begin) THEN
+              IF (buffers(n)%pos+message_size>mpi_buffer_size) THEN
+                buffer_space=buffers(n)%begin-1
+              ELSE
+                buffer_space=mpi_buffer_size-buffers(n)%begin+1
+              ENDIF
+            ELSE
+              buffer_space=buffers(n)%begin-buffers(n)%pos
+            ENDIF
+            
+            IF (buffer_space < message_size .OR. buffers(n)%request_free<=max_request/2) THEN
+              ok_out=.TRUE.
+!              PRINT *,"BUFFER FULL !!!!"
+!              PRINT *,"buffer_space",buffer_space,"request_free",buffers(n)%request_free
+!              PRINT *,"buffer_pos",buffers(n)%pos,"buffer_begin",buffers(n)%begin
+            ELSE
+              
+              IF (buffers(n)%pos+message_size>mpi_buffer_size) buffers(n)%pos=1
+          
+!              PRINT *,'reception du message'
+              CALL MPI_IRECV(buffers(n)%mpi_buffer(buffers(n)%pos),message_size,MPI_INTEGER8,          &
+                          client_rank(n),tag_iocomm,iocomm,buffers(n)%last_request,ierr)
+                          
+              buffers(n)%is_posted=.TRUE.
+!              PRINT *,"MPI_IRECV LAST_REQUEST",buffers(n)%last_request
+              CALL MPI_TEST(buffers(n)%last_request,ok_complete,status,ierr)
+!              PRINT *,"MPI_TEST LAST_REQUEST",buffers(n)%last_request,"ok_complete ?",ok_complete
+              
+              IF (ok_complete) THEN
+                buffers(n)%is_posted=.FALSE.
+                CALL Fill_request(n,Buffers(n)%pos,message_size)
+
+                buffers(n)%pos=buffers(n)%pos+message_size
+                 
+!                PRINT *,"buffer_pos",buffers(n)%pos
+!                PRINT *,"Message recu de taille", message_size
+!                PRINT *,"Message : ",buffers(n)%mpi_buffer(buffers(n)%pos:buffers(n)%pos+message_size-1)
+!                PRINT *,"Nouvelle taille buffer_pos",buffers(n)%pos
+                ok_out=.FALSE.
+              ELSE
+                ok_out=.TRUE.
+              ENDIF
+         
+            ENDIF
+          ELSE
+            ok_out=.TRUE.
+          ENDIF
+        ENDIF  ! (is_posted)
+        ok_out=.TRUE.
+      ENDDO
+    ENDDO
+
+    CALL VTe(VTcheck_buffer)
+
+  END SUBROUTINE Check_buffer
+  
+  SUBROUTINE Fill_request(n,pos,message_size)
+  USE mpi
+  IMPLICIT NONE
+    INTEGER :: n
+    INTEGER :: pos
+    INTEGER :: message_size
+    INTEGER :: current_size
+    INTEGER :: current_pos
+    INTEGER :: total_size
+    LOGICAL :: ok_out
+    INTEGER :: ierr
+!    PRINT *,'Fill_request!!!'
+!    PRINT *,'Buffer_pos',pos
+!    PRINT *,"First integer",Buffers(n)%mpi_buffer(pos)
+    total_size=0
+    current_pos=pos
+    
+    ok_out=.FALSE.
+    DO WHILE (.NOT. ok_out)
+      
+      IF (Buffers(n)%request_free==0) THEN
+        PRINT *,'Plus de requete disponible !!!!'
+        CALL MPI_ABORT(MPI_COMM_WORLD,-1,ierr)
+      ENDIF
+      
+      current_size=buffers(n)%mpi_buffer(current_pos)
+      Buffers(n)%request(Buffers(n)%request_pos)%pos=current_pos+1
+      Buffers(n)%request(Buffers(n)%request_pos)%size=current_size
+      total_size=total_size+current_size
+      
+      IF (Buffers(n)%request_pos==max_request) THEN 
+        Buffers(n)%request_pos=1
+      ELSE
+        Buffers(n)%request_pos=Buffers(n)%request_pos+1
+      ENDIF
+      Buffers(n)%request_free=Buffers(n)%request_free-1
+      Buffers(n)%nb_request=Buffers(n)%nb_request+1
+      
+      IF (total_size==message_size) ok_out=.TRUE.
+      IF (total_size>message_size) THEN
+        PRINT *,"Probleme : la taille du message ne coincide pas avec la taille de l'enveloppe"
+        CALL MPI_ABORT(MPI_COMM_WORLD,-1,ierr)
+      ENDIF
+      
+      current_pos=current_pos+current_size
+    ENDDO
+  
+  END SUBROUTINE Fill_request 
+    
+  
+  SUBROUTINE Process_request(is_terminated)
+  USE mod_event_server
+  USE mod_ioserver_para
+  USE mod_pack
+  USE mpitrace
+  USE mod_wait
+  IMPLICIT NONE
+    LOGICAL  :: is_terminated
+    INTEGER  :: n
+    
+    is_terminated=.FALSE.
+    
+    IF (ALL(buffers(:)%nb_request>0)) THEN
+      DO n=1,nb_client
+!        PRINT *,"nb_request ?",buffers(n)%nb_request
+        IF ( (buffers(n)%nb_request > 0) .AND. (.NOT. buffers(n)%is_terminated)) THEN
+!          PRINT *,"request_pos",buffers(n)%request_begin
+!          PRINT *,"buffer_pos",buffers(n)%request(buffers(n)%request_begin)%pos
+          CALL set_pack_buffer(buffers(n)%mpi_buffer,buffers(n)%request(buffers(n)%request_begin)%pos)
+          CALL VTb(VTprocess_event)
+          current_rank=n
+          CALL process_event(n,buffers(n)%is_terminated)
+          CALL VTe(VTprocess_event)
+          buffers(n)%nb_request=buffers(n)%nb_request-1
+          buffers(n)%request_free=buffers(n)%request_free+1
+        
+       
+          IF (Buffers(n)%request_begin==max_request) THEN
+            Buffers(n)%request_begin=1
+          ELSE
+            buffers(n)%request_begin=Buffers(n)%request_begin+1
+          ENDIF
+          
+          IF (buffers(n)%nb_request > 0) THEN 
+            buffers(n)%begin=buffers(n)%request(buffers(n)%request_begin)%pos
+          ELSE
+            buffers(n)%begin=buffers(n)%pos
+          ENDIF
+        ENDIF
+      ENDDO 
+    
+!      PRINT *,"buffers_is_terminated",buffers(1:nb_client)%is_terminated
+!      PRINT *,"buffers_nb_request",buffers(1:nb_client)%nb_request
+      IF (ALL(buffers(1:nb_client)%is_terminated)) THEN
+        IF (ALL(buffers(1:nb_client)%nb_request==0)) THEN
+          is_terminated=.TRUE.
+        ENDIF
+      ENDIF
+    ELSE
+      CALL Wait_us(5)
+    ENDIF     
+  END SUBROUTINE process_request  
+  
+    
+END MODULE mod_mpi_buffer_server
Index: /vendors/XMLIO_SERVER/current/src/IOSERVER/mod_pack.f90
===================================================================
--- /vendors/XMLIO_SERVER/current/src/IOSERVER/mod_pack.f90	(revision 1897)
+++ /vendors/XMLIO_SERVER/current/src/IOSERVER/mod_pack.f90	(revision 1897)
@@ -0,0 +1,603 @@
+  MODULE mod_pack
+    INTEGER,PARAMETER :: integer_size=4
+    INTEGER,PARAMETER :: pack_buffer_max_size=integer_size*1024*1024
+    INTEGER(kind=8),POINTER,SAVE      :: pack_buffer(:)
+    INTEGER,SAVE      :: pack_pos
+    
+    INTERFACE pack
+      MODULE PROCEDURE pack_r,pack_r1,pack_r2,pack_r3,pack_r4,                 &
+                       pack_i,pack_i1,pack_i2,pack_i3,pack_i4,                 &
+                       pack_l,pack_l1,pack_l2,pack_l3,pack_l4,                 &
+                       pack_c,pack_c1,pack_c2,pack_c3,pack_c4,                 &
+                       pack_attr
+    END INTERFACE pack
+
+    INTERFACE unpack
+      MODULE PROCEDURE unpack_r,unpack_r1,unpack_r2,unpack_r3,unpack_r4,       &
+                       unpack_i,unpack_i1,unpack_i2,unpack_i3,unpack_i4,       &
+                       unpack_l,unpack_l1,unpack_l2,unpack_l3,unpack_l4,       &
+                       unpack_c,unpack_c1,unpack_c2,unpack_c3,unpack_c4,       &
+                       unpack_attr
+    END INTERFACE unpack
+
+    INTERFACE pack_field
+      MODULE PROCEDURE pack_field1,pack_field2,pack_field3,pack_field4        
+    END INTERFACE pack_field
+
+    INTERFACE unpack_field
+      MODULE PROCEDURE unpack_field1,unpack_field2,unpack_field3,unpack_field4 
+    END INTERFACE unpack_field
+           
+  CONTAINS
+  
+    SUBROUTINE set_pack_buffer(pack_buffer0,pack_pos0)
+    IMPLICIT NONE
+    INTEGER(kind=8),POINTER  :: pack_buffer0(:)
+    INTEGER                  :: pack_pos0
+    
+      pack_buffer=>pack_buffer0
+      pack_pos=pack_pos0
+
+    END SUBROUTINE set_pack_buffer
+    
+    
+    SUBROUTINE pack_r(arg)
+      IMPLICIT NONE
+        REAL :: arg
+         
+        CALL packf_r(pack_buffer(pack_pos),pack_pos,arg,1)
+     
+     END SUBROUTINE pack_r
+     
+     SUBROUTINE pack_r1(arg)
+      IMPLICIT NONE
+        REAL :: arg(:)
+        
+        CALL packf_r(pack_buffer(pack_pos),pack_pos,arg,size(arg))
+        
+     END SUBROUTINE pack_r1
+
+    
+     SUBROUTINE pack_r2(arg)
+      IMPLICIT NONE
+        REAL :: arg(:,:)
+        
+        CALL packf_r(pack_buffer(pack_pos),pack_pos,arg,size(arg))
+        
+     END SUBROUTINE pack_r2
+     
+     
+     SUBROUTINE pack_r3(arg)
+      IMPLICIT NONE
+        REAL :: arg(:,:,:)
+        
+        CALL packf_r(pack_buffer(pack_pos),pack_pos,arg,size(arg))
+        
+     END SUBROUTINE pack_r3
+
+     
+     SUBROUTINE pack_r4(arg)
+      IMPLICIT NONE
+        REAL :: arg(:,:,:,:)
+        
+        CALL packf_r(pack_buffer(pack_pos),pack_pos,arg,size(arg))
+        
+     END SUBROUTINE pack_r4
+
+
+    SUBROUTINE unpack_r(arg)
+      IMPLICIT NONE
+        REAL :: arg
+         
+        CALL unpackf_r(pack_buffer(pack_pos),pack_pos,arg,1)
+     
+     END SUBROUTINE unpack_r
+     
+     SUBROUTINE unpack_r1(arg)
+      IMPLICIT NONE
+        REAL :: arg(:)
+        
+        CALL unpackf_r(pack_buffer(pack_pos),pack_pos,arg,size(arg))
+        
+     END SUBROUTINE unpack_r1
+
+    
+     SUBROUTINE unpack_r2(arg)
+      IMPLICIT NONE
+        REAL :: arg(:,:)
+        
+        CALL unpackf_r(pack_buffer(pack_pos),pack_pos,arg,size(arg))
+        
+     END SUBROUTINE unpack_r2
+     
+     
+     SUBROUTINE unpack_r3(arg)
+      IMPLICIT NONE
+        REAL :: arg(:,:,:)
+        
+        CALL unpackf_r(pack_buffer(pack_pos),pack_pos,arg,size(arg))
+        
+     END SUBROUTINE unpack_r3
+
+     
+     SUBROUTINE unpack_r4(arg)
+      IMPLICIT NONE
+        REAL :: arg(:,:,:,:)
+        
+        CALL unpackf_r(pack_buffer(pack_pos),pack_pos,arg,size(arg))
+        
+     END SUBROUTINE unpack_r4
+
+
+
+
+    SUBROUTINE pack_i(arg)
+      IMPLICIT NONE
+        INTEGER :: arg
+         
+        CALL packf_i(pack_buffer(pack_pos),pack_pos,arg,1)
+     
+     END SUBROUTINE pack_i
+     
+     SUBROUTINE pack_i1(arg)
+      IMPLICIT NONE
+        INTEGER :: arg(:)
+        
+        CALL packf_i(pack_buffer(pack_pos),pack_pos,arg,size(arg))
+        
+     END SUBROUTINE pack_i1
+
+    
+     SUBROUTINE pack_i2(arg)
+      IMPLICIT NONE
+        INTEGER :: arg(:,:)
+        
+        CALL packf_i(pack_buffer(pack_pos),pack_pos,arg,size(arg))
+        
+     END SUBROUTINE pack_i2
+     
+     
+     SUBROUTINE pack_i3(arg)
+      IMPLICIT NONE
+        INTEGER :: arg(:,:,:)
+        
+        CALL packf_i(pack_buffer(pack_pos),pack_pos,arg,size(arg))
+        
+     END SUBROUTINE pack_i3
+
+     
+     SUBROUTINE pack_i4(arg)
+      IMPLICIT NONE
+        INTEGER :: arg(:,:,:,:)
+        
+        CALL packf_i(pack_buffer(pack_pos),pack_pos,arg,size(arg))
+        
+     END SUBROUTINE pack_i4
+     
+
+    SUBROUTINE unpack_i(arg)
+      IMPLICIT NONE
+        INTEGER :: arg
+         
+        CALL unpackf_i(pack_buffer(pack_pos),pack_pos,arg,1)
+     
+     END SUBROUTINE unpack_i
+     
+     SUBROUTINE unpack_i1(arg)
+      IMPLICIT NONE
+        INTEGER :: arg(:)
+        
+        CALL unpackf_i(pack_buffer(pack_pos),pack_pos,arg,size(arg))
+        
+     END SUBROUTINE unpack_i1
+
+    
+     SUBROUTINE unpack_i2(arg)
+      IMPLICIT NONE
+        INTEGER :: arg(:,:)
+        
+        CALL unpackf_i(pack_buffer(pack_pos),pack_pos,arg,size(arg))
+        
+     END SUBROUTINE unpack_i2
+     
+     
+     SUBROUTINE unpack_i3(arg)
+      IMPLICIT NONE
+        INTEGER :: arg(:,:,:)
+        
+        CALL unpackf_i(pack_buffer(pack_pos),pack_pos,arg,size(arg))
+        
+     END SUBROUTINE unpack_i3
+
+     
+     SUBROUTINE unpack_i4(arg)
+      IMPLICIT NONE
+        INTEGER :: arg(:,:,:,:)
+        
+        CALL unpackf_i(pack_buffer(pack_pos),pack_pos,arg,size(arg))
+        
+     END SUBROUTINE unpack_i4     
+
+
+
+
+
+
+
+    SUBROUTINE pack_l(arg)
+      IMPLICIT NONE
+        LOGICAL :: arg
+         
+        CALL packf_l(pack_buffer(pack_pos),pack_pos,arg,1)
+     
+     END SUBROUTINE pack_l
+     
+     SUBROUTINE pack_l1(arg)
+      IMPLICIT NONE
+        LOGICAL :: arg(:)
+        
+        CALL packf_l(pack_buffer(pack_pos),pack_pos,arg,size(arg))
+        
+     END SUBROUTINE pack_l1
+
+    
+     SUBROUTINE pack_l2(arg)
+      IMPLICIT NONE
+        LOGICAL :: arg(:,:)
+        
+        CALL packf_l(pack_buffer(pack_pos),pack_pos,arg,size(arg))
+        
+     END SUBROUTINE pack_l2
+     
+     
+     SUBROUTINE pack_l3(arg)
+      IMPLICIT NONE
+        LOGICAL :: arg(:,:,:)
+        
+        CALL packf_l(pack_buffer(pack_pos),pack_pos,arg,size(arg))
+        
+     END SUBROUTINE pack_l3
+
+     
+     SUBROUTINE pack_l4(arg)
+      IMPLICIT NONE
+        LOGICAL :: arg(:,:,:,:)
+        
+        CALL packf_l(pack_buffer(pack_pos),pack_pos,arg,size(arg))
+        
+     END SUBROUTINE pack_l4
+     
+
+    SUBROUTINE unpack_l(arg)
+      IMPLICIT NONE
+        LOGICAL :: arg
+         
+        CALL unpackf_l(pack_buffer(pack_pos),pack_pos,arg,1)
+     
+     END SUBROUTINE unpack_l
+     
+     SUBROUTINE unpack_l1(arg)
+      IMPLICIT NONE
+        LOGICAL :: arg(:)
+        
+        CALL unpackf_l(pack_buffer(pack_pos),pack_pos,arg,size(arg))
+        
+     END SUBROUTINE unpack_l1
+
+    
+     SUBROUTINE unpack_l2(arg)
+      IMPLICIT NONE
+        LOGICAL :: arg(:,:)
+        
+        CALL unpackf_l(pack_buffer(pack_pos),pack_pos,arg,size(arg))
+        
+     END SUBROUTINE unpack_l2
+     
+     
+     SUBROUTINE unpack_l3(arg)
+      IMPLICIT NONE
+        LOGICAL :: arg(:,:,:)
+        
+        CALL unpackf_l(pack_buffer(pack_pos),pack_pos,arg,size(arg))
+        
+     END SUBROUTINE unpack_l3
+
+     
+     SUBROUTINE unpack_l4(arg)
+      IMPLICIT NONE
+        LOGICAL :: arg(:,:,:,:)
+        
+        CALL unpackf_l(pack_buffer(pack_pos),pack_pos,arg,size(arg))
+        
+     END SUBROUTINE unpack_l4     
+
+
+
+
+   
+     
+   SUBROUTINE pack_c(arg)
+      IMPLICIT NONE
+        CHARACTER(len=*) :: arg
+         
+        CALL packf_c(pack_buffer(pack_pos),pack_pos,arg,len(arg))
+     
+     END SUBROUTINE pack_c
+     
+     SUBROUTINE pack_c1(arg)
+      IMPLICIT NONE
+        CHARACTER(len=*) :: arg(:)
+        
+        CALL packf_c(pack_buffer(pack_pos),pack_pos,arg,size(arg)*len(arg(1)))
+        
+     END SUBROUTINE pack_c1
+
+    
+     SUBROUTINE pack_c2(arg)
+      IMPLICIT NONE
+        CHARACTER(len=*) :: arg(:,:)
+        
+        CALL packf_c(pack_buffer(pack_pos),pack_pos,arg,size(arg)*len(arg(1,1)))
+        
+     END SUBROUTINE pack_c2
+     
+     
+     SUBROUTINE pack_c3(arg)
+      IMPLICIT NONE
+        CHARACTER(len=*) :: arg(:,:,:)
+        
+        CALL packf_c(pack_buffer(pack_pos),pack_pos,arg,size(arg)*len(arg(1,1,1)))
+        
+     END SUBROUTINE pack_c3
+
+     
+     SUBROUTINE pack_c4(arg)
+      IMPLICIT NONE
+        CHARACTER(len=*) :: arg(:,:,:,:)
+        
+        CALL packf_c(pack_buffer(pack_pos),pack_pos,arg,size(arg)*len(arg(1,1,1,1)))
+        
+     END SUBROUTINE pack_c4
+     
+
+    SUBROUTINE unpack_c(arg)
+      IMPLICIT NONE
+        CHARACTER(len=*) :: arg
+         
+        CALL unpackf_c(pack_buffer(pack_pos),pack_pos,arg,len(arg))
+     
+     END SUBROUTINE unpack_c
+     
+     SUBROUTINE unpack_c1(arg)
+      IMPLICIT NONE
+        CHARACTER(len=*) :: arg(:)
+        
+        CALL unpackf_c(pack_buffer(pack_pos),pack_pos,arg,size(arg)*len(arg(1)))
+        
+     END SUBROUTINE unpack_c1
+
+    
+     SUBROUTINE unpack_c2(arg)
+      IMPLICIT NONE
+        CHARACTER(len=*) :: arg(:,:)
+        
+        CALL unpackf_c(pack_buffer(pack_pos),pack_pos,arg,size(arg)*len(arg(1,1)))
+        
+     END SUBROUTINE unpack_c2
+     
+     
+     SUBROUTINE unpack_c3(arg)
+      IMPLICIT NONE
+        CHARACTER(len=*) :: arg(:,:,:)
+        
+        CALL unpackf_c(pack_buffer(pack_pos),pack_pos,arg,size(arg)*len(arg(1,1,1)))
+        
+     END SUBROUTINE unpack_c3
+
+     
+     SUBROUTINE unpack_c4(arg)
+      IMPLICIT NONE
+        CHARACTER(len=*) :: arg(:,:,:,:)
+        
+        CALL unpackf_c(pack_buffer(pack_pos),pack_pos,arg,size(arg)*len(arg(1,1,1,1)))
+        
+     END SUBROUTINE unpack_c4     
+     
+
+
+
+
+     SUBROUTINE pack_field1(arg)
+     IMPLICIT NONE
+       REAL :: arg(:)
+     
+       CALL packf_field(pack_buffer(pack_pos),pack_pos,arg,size(arg)) 
+     END SUBROUTINE pack_field1
+
+
+     SUBROUTINE pack_field2(arg)
+     IMPLICIT NONE
+       REAL :: arg(:,:)
+       
+       CALL packf_field(pack_buffer(pack_pos),pack_pos,arg,size(arg)) 
+     END SUBROUTINE pack_field2
+     
+     SUBROUTINE pack_field3(arg)
+     IMPLICIT NONE
+       REAL :: arg(:,:,:)
+     
+       CALL packf_field(pack_buffer(pack_pos),pack_pos,arg,size(arg)) 
+     END SUBROUTINE pack_field3
+
+     SUBROUTINE pack_field4(arg)
+     IMPLICIT NONE
+       REAL :: arg(:,:,:,:)
+     
+       CALL packf_field(pack_buffer(pack_pos),pack_pos,arg,size(arg)) 
+     END SUBROUTINE pack_field4
+
+
+
+     SUBROUTINE unpack_field1(arg)
+     IMPLICIT NONE
+       REAL :: arg(:)
+     
+       CALL unpackf_field(pack_buffer(pack_pos),pack_pos,arg,size(arg)) 
+     END SUBROUTINE unpack_field1
+
+
+     SUBROUTINE unpack_field2(arg)
+     IMPLICIT NONE
+       REAL :: arg(:,:)
+     
+       CALL unpackf_field(pack_buffer(pack_pos),pack_pos,arg,size(arg)) 
+     END SUBROUTINE unpack_field2
+     
+     SUBROUTINE unpack_field3(arg)
+     IMPLICIT NONE
+       REAL :: arg(:,:,:)
+     
+       CALL unpackf_field(pack_buffer(pack_pos),pack_pos,arg,size(arg)) 
+     END SUBROUTINE unpack_field3
+
+     SUBROUTINE unpack_field4(arg)
+     IMPLICIT NONE
+       REAL :: arg(:,:,:,:)
+     
+       CALL unpackf_field(pack_buffer(pack_pos),pack_pos,arg,size(arg)) 
+     END SUBROUTINE unpack_field4
+      
+     SUBROUTINE pack_attr(attrib)
+     USE mod_attribut
+     USE mod_stdtype
+     IMPLICIT NONE
+       TYPE(attribut) :: attrib
+
+       CALL pack(attrib%object)
+       CALL pack(attrib%name)
+       CALL pack(attrib%type)
+       CALL pack(attrib%dim)
+       CALL pack(attrib%ndim)
+       CALL pack(attrib%string_len)
+              
+       SELECT CASE(attrib%type)
+         CASE (integer0)
+           CALL pack(attrib%integer0_ptr)
+         CASE (integer1)
+           CALL pack(attrib%integer1_ptr)
+         CASE (integer2)
+           CALL pack(attrib%integer2_ptr)
+         CASE (real0)
+           CALL pack(attrib%real0_ptr)
+         CASE (real1)
+           CALL pack(attrib%real1_ptr)
+         CASE (real2)
+           CALL pack(attrib%real2_ptr)
+         CASE (logical0)
+           CALL pack(attrib%logical0_ptr)
+         CASE (logical1)
+           CALL pack(attrib%logical1_ptr)
+         CASE (logical2)
+           CALL pack(attrib%logical2_ptr)
+         CASE (string0)
+           CALL pack_string0(attrib%string0_ptr)
+         CASE (string1)
+           CALL pack_string1(attrib%string1_ptr)
+         CASE (string2)
+           CALL pack(attrib%string2_ptr)
+       END SELECT
+
+     CONTAINS
+
+       SUBROUTINE pack_string0(str)
+         CHARACTER(LEN=attrib%string_len) ::str
+           CALL pack(str)
+       END SUBROUTINE
+
+       SUBROUTINE pack_string1(str)
+         CHARACTER(LEN=attrib%string_len) ::str(:)
+           CALL pack(str)
+       END SUBROUTINE
+       
+       SUBROUTINE pack_string2(str)
+         CHARACTER(LEN=attrib%string_len) ::str(:,:)
+           CALL pack(str)
+       END SUBROUTINE
+
+     END SUBROUTINE pack_attr  
+
+     SUBROUTINE unpack_attr(attrib)
+     USE mod_attribut
+     USE mod_stdtype
+     IMPLICIT NONE
+       TYPE(attribut) :: attrib
+
+       CALL unpack(attrib%object)
+       CALL unpack(attrib%name)
+       CALL unpack(attrib%type)
+       CALL unpack(attrib%dim)
+       CALL unpack(attrib%ndim)
+       CALL unpack(attrib%string_len)
+              
+       SELECT CASE(attrib%type)
+         CASE (integer0)
+           ALLOCATE(attrib%integer0_ptr)
+           CALL unpack(attrib%integer0_ptr)
+         CASE (integer1)
+           ALLOCATE(attrib%integer1_ptr(attrib%dim(1)))
+           CALL unpack(attrib%integer1_ptr)
+         CASE (integer2)
+           ALLOCATE(attrib%integer2_ptr(attrib%dim(1),attrib%dim(2)))
+           CALL unpack(attrib%integer2_ptr)
+         CASE (real0)
+           ALLOCATE(attrib%real0_ptr)
+           CALL unpack(attrib%real0_ptr)
+         CASE (real1)
+           ALLOCATE(attrib%real1_ptr(attrib%dim(1)))
+           CALL unpack(attrib%real1_ptr)
+         CASE (real2)
+           ALLOCATE(attrib%real2_ptr(attrib%dim(1),attrib%dim(2)))
+         CASE (logical0)
+           ALLOCATE(attrib%logical0_ptr)
+           CALL unpack(attrib%logical0_ptr)
+         CASE (logical1)
+           ALLOCATE(attrib%logical1_ptr(attrib%dim(1)))
+           CALL unpack(attrib%logical1_ptr)
+         CASE (logical2)
+           ALLOCATE(attrib%logical2_ptr(attrib%dim(1),attrib%dim(2)))
+           CALL unpack(attrib%logical2_ptr)
+         CASE (string0)
+           ALLOCATE(attrib%string0_ptr)
+           CALL unpack_string0
+         CASE (string1)
+           ALLOCATE(attrib%string1_ptr(attrib%dim(1)))
+           CALL unpack_string1
+         CASE (string2)
+           ALLOCATE(attrib%string2_ptr(attrib%dim(1),attrib%dim(2)))
+           CALL unpack_string2
+       END SELECT
+
+     CONTAINS
+
+       SUBROUTINE unpack_string0
+         CHARACTER(LEN=attrib%string_len) ::str
+           CALL unpack(str)
+           attrib%string0_ptr=str
+       END SUBROUTINE
+
+       SUBROUTINE unpack_string1
+         CHARACTER(LEN=attrib%string_len) ::str(attrib%dim(1))
+           CALL unpack(str)
+           attrib%string1_ptr=str
+       END SUBROUTINE
+       
+       SUBROUTINE unpack_string2
+         CHARACTER(LEN=attrib%string_len) ::str(attrib%dim(1),attrib%dim(2))
+           CALL unpack(str)
+           attrib%string2_ptr=str
+       END SUBROUTINE
+
+     END SUBROUTINE unpack_attr              
+
+     
+  END MODULE mod_pack
Index: /vendors/XMLIO_SERVER/current/src/IOSERVER/mod_prec.f90
===================================================================
--- /vendors/XMLIO_SERVER/current/src/IOSERVER/mod_prec.f90	(revision 1897)
+++ /vendors/XMLIO_SERVER/current/src/IOSERVER/mod_prec.f90	(revision 1897)
@@ -0,0 +1,7 @@
+MODULE mod_prec
+  INTEGER,PARAMETER :: INTEGER_SIZE   = 4 
+  INTEGER,PARAMETER :: REAL_SIZE      = 8 
+  INTEGER,PARAMETER :: LOGICAL_SIZE   = 4 
+  INTEGER,PARAMETER :: CHARACTER_SIZE = 1
+  INTEGER,PARAMETER :: BLOCK_SIZE     = 8
+END MODULE mod_prec
Index: /vendors/XMLIO_SERVER/current/src/IOSERVER/mod_wait.f90
===================================================================
--- /vendors/XMLIO_SERVER/current/src/IOSERVER/mod_wait.f90	(revision 1897)
+++ /vendors/XMLIO_SERVER/current/src/IOSERVER/mod_wait.f90	(revision 1897)
@@ -0,0 +1,68 @@
+MODULE mod_wait
+  INTEGER, SAVE :: wait_param=10
+  REAL, SAVE    :: opt_param
+
+
+  INTEGER, SAVE :: last_count
+
+CONTAINS
+
+  
+  FUNCTION Top()
+  IMPLICIT NONE
+    DOUBLE PRECISION :: Top
+    INTEGER :: count,count_rate,count_max
+    LOGICAL, SAVE :: first=.TRUE.
+    
+      
+    CALL system_clock(count,count_rate,count_max)
+    IF (first) THEN
+      Top=0.
+    ELSE
+      IF (Count>=Last_Count) THEN
+        Top=(1.*(Count-last_Count))/count_rate
+      ELSE
+        Top=(1.*(Count-last_Count+Count_max))/count_rate
+      ENDIF
+    ENDIF
+    Last_Count=Count
+    first=.FALSE. 
+  END FUNCTION Top
+  
+  SUBROUTINE Init_wait
+  IMPLICIT NONE
+    INTEGER :: i,j
+    LOGICAL :: out_ok
+    DOUBLE PRECISION :: time 
+    INTEGER :: last_param
+  
+    out_ok=.FALSE.
+    
+    DO WHILE (.NOT. out_ok)
+      opt_param=0.
+    
+      time=top()
+!CDIR NOVECTOR
+      DO i=1,1000000*wait_param
+         opt_param=opt_param+(i/(i+opt_param))
+      ENDDO
+      time=top()
+      last_param=wait_param
+      wait_param=wait_param*(1./time)
+      IF (ABS(wait_param-last_param)/(0.5*(wait_param+last_param)) <0.01) out_ok=.TRUE.
+    END DO
+  END SUBROUTINE Init_wait
+
+  SUBROUTINE Wait_us(n)
+  IMPLICIT NONE
+  INTEGER :: n
+  INTEGER :: i
+
+!CDIR NOVECTOR  
+    DO i=1,n*wait_param
+         opt_param=opt_param+(i/(i+opt_param))
+    ENDDO
+      
+  END SUBROUTINE Wait_us   
+
+END MODULE mod_wait  
Index: /vendors/XMLIO_SERVER/current/src/IOSERVER/mpi_mod.F90
===================================================================
--- /vendors/XMLIO_SERVER/current/src/IOSERVER/mpi_mod.F90	(revision 1897)
+++ /vendors/XMLIO_SERVER/current/src/IOSERVER/mpi_mod.F90	(revision 1897)
@@ -0,0 +1,11 @@
+MODULE mpi_mod
+
+#ifdef NO_MPI
+    LOGICAL, PARAMETER :: using_mpi=.FALSE.
+    INCLUDE 'ios_mpif.h'
+#else
+    LOGICAL, PARAMETER :: using_mpi=.TRUE.
+    INCLUDE 'mpif.h'
+#endif
+
+END MODULE mpi_mod
Index: /vendors/XMLIO_SERVER/current/src/IOSERVER/mpi_wrapper.F90
===================================================================
--- /vendors/XMLIO_SERVER/current/src/IOSERVER/mpi_wrapper.F90	(revision 1897)
+++ /vendors/XMLIO_SERVER/current/src/IOSERVER/mpi_wrapper.F90	(revision 1897)
@@ -0,0 +1,80 @@
+SUBROUTINE void
+
+END SUBROUTINE void
+
+#ifdef NO_MPI
+
+SUBROUTINE MPI_ALLOC_MEM
+
+END SUBROUTINE MPI_ALLOC_MEM
+
+
+SUBROUTINE MPI_INITIALIZED
+
+END SUBROUTINE MPI_INITIALIZED
+
+
+SUBROUTINE MPI_INIT
+
+END SUBROUTINE MPI_INIT
+
+
+SUBROUTINE MPI_COMM_SIZE
+
+END SUBROUTINE MPI_COMM_SIZE
+
+
+SUBROUTINE MPI_COMM_RANK
+
+END SUBROUTINE MPI_COMM_RANK 
+
+
+SUBROUTINE MPI_COMM_SPLIT
+
+END SUBROUTINE MPI_COMM_SPLIT
+
+
+SUBROUTINE MPI_ALLGATHER
+
+END SUBROUTINE MPI_ALLGATHER
+
+
+SUBROUTINE MPI_FINALIZE
+
+END SUBROUTINE MPI_FINALIZE
+
+
+SUBROUTINE MPI_ISSEND
+
+END SUBROUTINE MPI_ISSEND
+
+
+SUBROUTINE MPI_TEST
+
+END SUBROUTINE MPI_TEST
+
+
+SUBROUTINE MPI_GET_COUNT
+
+END SUBROUTINE MPI_GET_COUNT
+
+
+SUBROUTINE MPI_IPROBE 
+
+END SUBROUTINE MPI_IPROBE 
+
+
+SUBROUTINE MPI_IRECV
+
+END SUBROUTINE MPI_IRECV
+
+
+SUBROUTINE MPI_ABORT
+
+END SUBROUTINE MPI_ABORT
+
+SUBROUTINE MPI_BARRIER
+
+END SUBROUTINE MPI_BARRIER
+
+#endif
Index: /vendors/XMLIO_SERVER/current/src/IOSERVER/mpitrace.F90
===================================================================
--- /vendors/XMLIO_SERVER/current/src/IOSERVER/mpitrace.F90	(revision 1897)
+++ /vendors/XMLIO_SERVER/current/src/IOSERVER/mpitrace.F90	(revision 1897)
@@ -0,0 +1,78 @@
+module mpitrace
+  INTEGER,parameter :: VTcheck_buffer=91
+  INTEGER,parameter :: VTprocess_event=92
+  INTEGER,parameter :: VTbuffer_full=93
+  
+  INTEGER,parameter :: nb_inst=7
+  INTEGER :: MPE_begin(nb_inst)
+  INTEGER :: MPE_end(nb_inst)
+  
+contains
+
+  subroutine InitVampir
+    implicit none
+
+#ifdef USE_VT
+    include 'VT.inc'
+    integer :: ierr
+    
+    call VTSYMDEF(VTcheck_buffer,"check_buffer","check_buffer",ierr)
+    call VTSYMDEF(VTprocess_event,"process_event","process_event",ierr)
+    call VTSYMDEF(VTbuffer_full,"buffer_full","buffer_full",ierr)
+    PRINT *,'definition des symbole VT'
+#endif
+
+#ifdef USE_MPE
+    include 'mpe_logf.h' 
+    integer :: ierr,i
+    
+    DO i=1,nb_inst
+      ierr = MPE_Log_get_state_eventIDs( MPE_begin(i), MPE_end(i) )
+    ENDDO
+    
+    ierr = MPE_Describe_state( MPE_begin(VTcaldyn), MPE_end(VTcaldyn),"caldyn", "yellow" )
+    ierr = MPE_Describe_state( MPE_begin(VTintegre), MPE_end(VTintegre),"integre", "blue" )
+    ierr = MPE_Describe_state( MPE_begin(VTadvection), MPE_end(VTadvection),"advection", "green" )
+    ierr = MPE_Describe_state( MPE_begin(VTdissipation), MPE_end(VTdissipation),"dissipation", "ivory" )
+    ierr = MPE_Describe_state( MPE_begin(VThallo), MPE_end(VThallo),"hallo", "orange" )
+    ierr = MPE_Describe_state( MPE_begin(VTphysiq), MPE_end(VTphysiq),"physiq", "purple" )
+    ierr = MPE_Describe_state( MPE_begin(VTinca), MPE_end(VTinca),"inca", "LightBlue" )
+#endif     
+  end subroutine InitVampir
+
+  subroutine VTb(number)
+    implicit none
+    INTEGER :: number
+#ifdef USE_VT    
+    include 'VT.inc'
+    integer :: ierr
+    
+    call VTBEGIN(number,ierr)
+#endif 
+#ifdef USE_MPE
+    include 'mpe_logf.h' 
+    integer :: ierr,i
+    ierr = MPE_Log_event( MPE_begin(number), 0, '' )
+#endif
+
+  end subroutine VTb
+
+  subroutine VTe(number)
+    implicit none
+    INTEGER :: Number
+#ifdef USE_VT    
+    include 'VT.inc'
+    integer :: ierr
+   
+    call VTEND(number,ierr)
+#endif    
+
+#ifdef USE_MPE
+    include 'mpe_logf.h' 
+    integer :: ierr,i
+    ierr = MPE_Log_event( MPE_end(number), 0, '' )
+#endif
+
+  end subroutine VTe
+  
+end module mpitrace
Index: /vendors/XMLIO_SERVER/current/src/IOSERVER/pack_c.c.old
===================================================================
--- /vendors/XMLIO_SERVER/current/src/IOSERVER/pack_c.c.old	(revision 1897)
+++ /vendors/XMLIO_SERVER/current/src/IOSERVER/pack_c.c.old	(revision 1897)
@@ -0,0 +1,101 @@
+
+
+
+typedef int     INTEGER ;
+typedef double  REAL    ;
+typedef int     LOGICAL ; 
+typedef char    CHARACTER ;
+
+int INTEGER_SIZE   = 4 ;
+int REAL_SIZE      = 8 ;
+int LOGICAL_SIZE   = 4 ;
+int CHARACTER_SIZE = 1 ;
+
+
+
+
+
+
+
+void packc_r_(unsigned char * buffer, INTEGER * position, unsigned char * var, INTEGER * size)
+{
+  int i ;
+  
+  for(i=0;i<(*size)*REAL_SIZE;i++,(*position)++) buffer[*position]=var[i] ;
+}
+    
+void packc_i_(unsigned char * buffer, INTEGER * position, unsigned char * var, INTEGER * size)
+{
+  int i ;
+  
+  for(i=0;i<(*size)*INTEGER_SIZE;i++,(*position)++) buffer[*position]=var[i] ;
+
+}
+
+void packc_l_(unsigned char * buffer, INTEGER * position, unsigned char * var, INTEGER * size)
+{
+  int i ;
+  
+  for(i=0;i<(*size)*LOGICAL_SIZE;i++,(*position)++) buffer[*position]=var[i] ;
+}
+
+void packc_c_(unsigned char * buffer, INTEGER * position, unsigned char * var, INTEGER * size, int strsize)
+{
+  int i ;
+   printf("longueur de la chaine %i \n",strsize) ;
+  for(i=0;i<(*size)*CHARACTER_SIZE;i++,(*position)++) buffer[*position]=var[i] ;
+}
+
+
+void unpackc_r_(unsigned char * buffer, INTEGER * position, unsigned char * var, INTEGER * size)
+{
+  int i ;
+
+  for(i=0;i<(*size)*REAL_SIZE;i++,(*position)++) var[i]=buffer[*position] ;
+}
+    
+void unpackc_i_(unsigned char * buffer, INTEGER * position, unsigned char * var, INTEGER * size)
+{
+  int i ;
+  
+  for(i=0;i<(*size)*INTEGER_SIZE;i++,(*position)++) var[i]=buffer[*position] ;
+
+}
+
+void unpackc_l_(unsigned char * buffer, INTEGER * position, unsigned char * var, INTEGER * size)
+{
+  int i ;
+  
+  for(i=0;i<(*size)*LOGICAL_SIZE;i++,(*position)++) var[i]=buffer[*position] ;
+}
+
+void unpackc_c_(unsigned char * buffer, INTEGER * position, unsigned char * var, INTEGER * size,int strsize)
+{
+  int i ;
+  
+  for(i=0;i<(*size)*CHARACTER_SIZE;i++,(*position)++) var[i]=buffer[*position] ;
+}
+
+void packc_field_(REAL* buffer, INTEGER* position, REAL* var,INTEGER * size)
+{
+  int i;
+  int s ;
+  
+  s=*size ;
+  buffer+=(*position) ;
+#pragma vdir nooverlap
+  for(i=0;i<s;i++) buffer[i]=var[i] ;
+  position+=s ;
+}
+
+void unpackc_field_(REAL* buffer, INTEGER* position, REAL* var,INTEGER* size)
+{
+  int i;
+  int s ;
+  
+  s=*size ;
+  buffer+=(*position) ;
+#pragma vdir nooverlap
+  for(i=0;i<s;i++) var[i]=buffer[i] ;
+  position+=s ;
+}
Index: /vendors/XMLIO_SERVER/current/src/IOSERVER/pack_f.f90
===================================================================
--- /vendors/XMLIO_SERVER/current/src/IOSERVER/pack_f.f90	(revision 1897)
+++ /vendors/XMLIO_SERVER/current/src/IOSERVER/pack_f.f90	(revision 1897)
@@ -0,0 +1,220 @@
+SUBROUTINE packf_r(buffer,position,var,var_size)
+  USE mod_prec
+  IMPLICIT NONE
+    INTEGER           :: var_size
+    REAL,DIMENSION(var_size) :: buffer
+    INTEGER           :: position
+    REAL,DIMENSION(var_size) :: var
+   
+    INTEGER :: i
+    INTEGER :: tot_size
+
+    tot_size=var_size*REAL_SIZE
+
+    DO i=1,var_size
+      buffer(i)=var(i)
+    ENDDO
+
+    position=position+tot_size/BLOCK_SIZE
+    IF (MOD(tot_size,BLOCK_SIZE)/=0) position=position+1
+
+END SUBROUTINE packf_r
+
+
+SUBROUTINE packf_field(buffer,position,var,var_size)
+  USE mod_prec
+  IMPLICIT NONE
+    INTEGER           :: var_size
+    REAL,DIMENSION(var_size) :: buffer
+    INTEGER           :: position
+    REAL,DIMENSION(var_size) :: var
+   
+    INTEGER :: i
+    INTEGER :: tot_size
+    
+    tot_size=var_size*REAL_SIZE
+        
+    DO i=1,var_size
+      buffer(i)=var(i)
+    ENDDO
+          
+    position=position+tot_size/BLOCK_SIZE
+    IF (MOD(tot_size,BLOCK_SIZE)/=0) position=position+1
+    
+END SUBROUTINE packf_field
+
+SUBROUTINE packf_i(buffer,position,var,var_size)
+  USE mod_prec
+  IMPLICIT NONE
+    INTEGER           :: var_size
+    INTEGER,DIMENSION(var_size) :: buffer
+    INTEGER           :: position
+    INTEGER,DIMENSION(var_size) :: var
+   
+    INTEGER :: i
+    INTEGER :: tot_size
+    
+    tot_size=var_size*INTEGER_SIZE
+        
+    DO i=1,var_size
+      buffer(i)=var(i)
+    ENDDO
+          
+    position=position+tot_size/BLOCK_SIZE
+    IF (MOD(tot_size,BLOCK_SIZE)/=0) position=position+1
+    
+END SUBROUTINE packf_i
+
+SUBROUTINE packf_l(buffer,position,var,var_size)
+  USE mod_prec
+  IMPLICIT NONE
+    INTEGER           :: var_size
+    LOGICAL,DIMENSION(var_size) :: buffer
+    INTEGER           :: position
+    LOGICAL,DIMENSION(var_size) :: var
+   
+    INTEGER :: i
+    INTEGER :: tot_size
+    
+    tot_size=var_size*LOGICAL_SIZE
+        
+    DO i=1,var_size
+      buffer(i)=var(i)
+    ENDDO
+          
+    position=position+tot_size/BLOCK_SIZE
+    IF (MOD(tot_size,BLOCK_SIZE)/=0) position=position+1
+    
+END SUBROUTINE packf_l
+
+SUBROUTINE packf_c(buffer,position,var,var_size)
+  USE mod_prec
+  IMPLICIT NONE
+    INTEGER                  :: var_size
+    CHARACTER(LEN=var_size)  :: buffer
+    INTEGER                  :: position
+    CHARACTER(LEN=var_size)  :: var
+   
+    INTEGER :: tot_size
+    
+    tot_size=var_size*CHARACTER_SIZE
+        
+    buffer(1:var_size)=var(1:var_size)
+          
+    position=position+tot_size/BLOCK_SIZE
+    IF (MOD(tot_size,BLOCK_SIZE)/=0) position=position+1
+    
+END SUBROUTINE packf_c
+
+
+
+
+
+
+SUBROUTINE unpackf_r(buffer,position,var,var_size)
+  USE mod_prec
+  IMPLICIT NONE
+    INTEGER           :: var_size
+    REAL,DIMENSION(var_size) :: buffer
+    INTEGER           :: position
+    REAL,DIMENSION(var_size) :: var
+   
+    INTEGER :: i
+    INTEGER :: tot_size
+    
+    tot_size=var_size*REAL_SIZE
+        
+    DO i=1,var_size
+      var(i)=buffer(i)
+    ENDDO
+          
+    position=position+tot_size/BLOCK_SIZE
+    IF (MOD(tot_size,BLOCK_SIZE)/=0) position=position+1
+    
+END SUBROUTINE unpackf_r
+
+
+SUBROUTINE unpackf_field(buffer,position,var,var_size)
+  USE mod_prec
+  IMPLICIT NONE
+    INTEGER           :: var_size
+    REAL,DIMENSION(var_size) :: buffer
+    INTEGER           :: position
+    REAL,DIMENSION(var_size) :: var
+   
+    INTEGER :: i
+    INTEGER :: tot_size
+    
+    tot_size=var_size*REAL_SIZE
+        
+    DO i=1,var_size
+      var(i)=buffer(i)
+    ENDDO
+          
+    position=position+tot_size/BLOCK_SIZE
+    IF (MOD(tot_size,BLOCK_SIZE)/=0) position=position+1
+    
+END SUBROUTINE unpackf_field
+
+SUBROUTINE unpackf_i(buffer,position,var,var_size)
+  USE mod_prec
+  IMPLICIT NONE
+    INTEGER           :: var_size
+    INTEGER,DIMENSION(var_size) :: buffer
+    INTEGER           :: position
+    INTEGER,DIMENSION(var_size) :: var
+   
+    INTEGER :: i
+    INTEGER :: tot_size
+    
+    tot_size=var_size*INTEGER_SIZE
+        
+    DO i=1,var_size
+      var(i)=buffer(i)
+    ENDDO
+          
+    position=position+tot_size/BLOCK_SIZE
+    IF (MOD(tot_size,BLOCK_SIZE)/=0) position=position+1
+    
+END SUBROUTINE unpackf_i
+
+SUBROUTINE unpackf_l(buffer,position,var,var_size)
+  USE mod_prec
+  IMPLICIT NONE
+    INTEGER           :: var_size
+    LOGICAL,DIMENSION(var_size) :: buffer
+    INTEGER           :: position
+    LOGICAL,DIMENSION(var_size) :: var
+   
+    INTEGER :: i
+    INTEGER :: tot_size
+    
+    tot_size=var_size*LOGICAL_SIZE
+        
+    DO i=1,var_size
+      var(i)=buffer(i)
+    ENDDO
+          
+    position=position+tot_size/BLOCK_SIZE
+    IF (MOD(tot_size,BLOCK_SIZE)/=0) position=position+1
+    
+END SUBROUTINE unpackf_l
+
+SUBROUTINE unpackf_c(buffer,position,var,var_size)
+  USE mod_prec
+  IMPLICIT NONE
+    INTEGER                  :: var_size
+    CHARACTER(LEN=var_size)  :: buffer
+    INTEGER                  :: position
+    CHARACTER(LEN=var_size)  :: var
+    
+    INTEGER :: tot_size
+    
+    tot_size=var_size*CHARACTER_SIZE
+        
+    var(1:var_size)=buffer(1:var_size)
+          
+    position=position+tot_size/BLOCK_SIZE
+    IF (MOD(tot_size,BLOCK_SIZE)/=0) position=position+1
+    
+END SUBROUTINE unpackf_c
Index: /vendors/XMLIO_SERVER/current/src/IOSERVER/server.f90
===================================================================
--- /vendors/XMLIO_SERVER/current/src/IOSERVER/server.f90	(revision 1897)
+++ /vendors/XMLIO_SERVER/current/src/IOSERVER/server.f90	(revision 1897)
@@ -0,0 +1,46 @@
+PROGRAM server
+  USE mod_ioserver_para
+  USE mod_mpi_buffer_server
+  USE mod_wait
+  USE mod_global_memory
+  USE ioipsl
+  USE iomanager
+  USE mod_interface_ioipsl
+  USE mod_ioserver_namelist
+  
+  IMPLICIT NONE
+  INCLUDE 'mpif.h'
+  
+  INTEGER :: i,j,ierr
+  LOGICAL :: is_terminated
+  
+!  CALL SLEEP(60)
+  PRINT *,'je suis un serveur'
+  CALL read_namelist
+  CALL init_parallel
+  CALL init_mpi_buffer
+  CALL init_wait
+  CALL init_interface_ioipsl
+  
+  CALL iom__init(nb_client,mpi_size,mpi_rank)
+  PRINT *,'je suis un serveur'
+  
+
+!  CALL MPI_BARRIER(iocomm,ierr)
+  
+  is_terminated=.FALSE.
+  
+  DO WHILE (.NOT. is_terminated)
+    CALL Check_buffer
+    CALL process_request(is_terminated)
+!    CALL wait_us(10)
+  ENDDO
+
+!  CALL MPI_BARRIER(MPI_COMM_WORLD,ierr)
+  CALL histclo
+  
+  CALL Finalize_parallel
+
+  PRINT *,"THAT'S ALL FOLK"
+  
+END PROGRAM server
Index: /vendors/XMLIO_SERVER/current/src/XMLIO/create_template
===================================================================
--- /vendors/XMLIO_SERVER/current/src/XMLIO/create_template	(revision 1897)
+++ /vendors/XMLIO_SERVER/current/src/XMLIO/create_template	(revision 1897)
@@ -0,0 +1,25 @@
+#! /bin/bash
+
+function template() 
+{
+  echo ${1}
+  sed "s/#TYPE#/${1}/g" vector_def.template > vector_${1}_def.inc
+  sed "s/#TYPE#/${1}/g" vector_contains.template > vector_${1}_contains.inc
+}
+
+
+template field
+template field_group
+template axis
+template axis_group
+template node
+template domain
+template grid
+template grid_group
+template file
+template file_group
+template field_dep
+template file_dep
+template field_out
+template context
+template zoom
Index: /vendors/XMLIO_SERVER/current/src/XMLIO/mod_attribut.f90
===================================================================
--- /vendors/XMLIO_SERVER/current/src/XMLIO/mod_attribut.f90	(revision 1897)
+++ /vendors/XMLIO_SERVER/current/src/XMLIO/mod_attribut.f90	(revision 1897)
@@ -0,0 +1,283 @@
+MODULE mod_attribut
+  USE mod_xmlio_parameters
+  USE mod_attribut_list
+  USE mod_stdtype
+  USE string_function  
+  
+  TYPE, PUBLIC :: attribut
+    INTEGER :: object
+    INTEGER :: name
+    INTEGER :: type
+    INTEGER :: dim(7)
+    INTEGER :: ndim
+    INTEGER,POINTER :: integer0_ptr
+    INTEGER,POINTER :: integer1_ptr(:)
+    INTEGER,POINTER :: integer2_ptr(:,:)
+    REAL,POINTER    :: real0_ptr
+    REAL,POINTER    :: real1_ptr(:)
+    REAL,POINTER    :: real2_ptr(:,:)
+    LOGICAL,POINTER :: logical0_ptr
+    LOGICAL,POINTER :: logical1_ptr(:)
+    LOGICAL,POINTER :: logical2_ptr(:,:)
+    
+    CHARACTER(LEN=str_len),POINTER :: string0_ptr
+    CHARACTER(LEN=str_len),POINTER :: string1_ptr(:)
+    CHARACTER(LEN=str_len),POINTER :: string2_ptr(:,:)
+    INTEGER                        :: string_len
+    
+  END TYPE attribut
+  
+  INTERFACE attr
+    MODULE PROCEDURE attr_int0,attr_int1,attr_int2,              &
+                     attr_real0,attr_real1,attr_real2,           &
+                     attr_logical0,attr_logical1,attr_logical2,  &
+                     attr_string0,attr_string1,attr_string2
+  END INTERFACE
+                     
+CONTAINS
+  
+  FUNCTION attr_get_object(attr_name)
+  USE mod_attribut_list
+  USE mod_object
+  USE error_msg
+  IMPLICIT NONE
+    INTEGER, INTENT(IN) :: attr_name
+    INTEGER             :: attr_get_object
+    
+    IF (attr_name > field__begin .AND. attr_name < field__end) THEN
+      attr_get_object=field_object
+      RETURN
+    ENDIF
+    
+    IF (attr_name > file__begin .AND. attr_name < file__end) THEN
+      attr_get_object=file_object
+      RETURN
+    ENDIF
+
+    IF (attr_name > grid__begin .AND. attr_name < grid__end) THEN
+      attr_get_object=grid_object
+      RETURN
+    ENDIF
+
+    IF (attr_name > axis__begin .AND. attr_name < axis__end) THEN
+      attr_get_object=axis_object
+      RETURN
+    ENDIF
+    
+    IF (attr_name > zoom__begin .AND. attr_name < zoom__end) THEN
+      attr_get_object=zoom_object
+      RETURN
+    ENDIF
+
+    WRITE (message,*) 'Attribut name value :',attr_name,'is undefined'
+    CALL error("mod_attributd::attr_get_object") 
+   
+  END FUNCTION attr_get_object 
+
+  SUBROUTINE attr_deallocate(attrib)
+  IMPLICIT NONE
+  TYPE(attribut) :: attrib
+
+    SELECT CASE(attrib%type)
+       CASE (integer0)
+         DEALLOCATE(attrib%integer0_ptr)
+       CASE (integer1)
+         DEALLOCATE(attrib%integer1_ptr)
+       CASE (integer2)
+         DEALLOCATE(attrib%integer2_ptr)
+       CASE (real0)
+         DEALLOCATE(attrib%real0_ptr)
+       CASE (real1)
+         DEALLOCATE(attrib%real1_ptr)
+       CASE (real2)
+         DEALLOCATE(attrib%real2_ptr)
+       CASE (logical0)
+         DEALLOCATE(attrib%logical0_ptr)
+       CASE (logical1)
+         DEALLOCATE(attrib%logical1_ptr)
+       CASE (logical2)
+         DEALLOCATE(attrib%logical2_ptr)
+       CASE (string0)
+         DEALLOCATE(attrib%string0_ptr)
+       CASE (string1)
+         DEALLOCATE(attrib%string1_ptr)
+       CASE (string2)
+         DEALLOCATE(attrib%string2_ptr)
+    END SELECT         
+  
+  END SUBROUTINE attr_deallocate
+
+  FUNCTION attr_int0(attr_name,value) 
+  USE mod_stdtype
+    IMPLICIT NONE
+    INTEGER :: attr_name
+    INTEGER,TARGET :: value
+    
+    TYPE(attribut) :: attr_int0
+    attr_int0%object=attr_get_object(attr_name) 
+    attr_int0%name=attr_name
+    attr_int0%type=integer0
+    attr_int0%integer0_ptr=>value
+    
+  END FUNCTION attr_int0
+
+  FUNCTION attr_int1(attr_name,value) 
+  USE mod_stdtype
+    IMPLICIT NONE
+    INTEGER :: attr_name
+    INTEGER,TARGET :: value(:)
+    
+    TYPE(attribut) :: attr_int1
+    attr_int1%object=attr_get_object(attr_name) 
+    attr_int1%name=attr_name
+    attr_int1%type=integer1
+    attr_int1%integer1_ptr=>value
+    
+  END FUNCTION attr_int1    
+
+  FUNCTION attr_int2(attr_name,value) 
+  USE mod_stdtype
+    IMPLICIT NONE
+    INTEGER :: attr_name
+    INTEGER,TARGET :: value(:,:)
+    
+    TYPE(attribut) :: attr_int2
+    attr_int2%object=attr_get_object(attr_name) 
+    attr_int2%name=attr_name
+    attr_int2%type=integer2
+    attr_int2%integer2_ptr=>value
+    
+  END FUNCTION attr_int2
+          
+
+  FUNCTION attr_real0(attr_name,value) 
+  USE mod_stdtype
+    IMPLICIT NONE
+    INTEGER :: attr_name
+    REAL,TARGET :: value
+    
+    TYPE(attribut) :: attr_real0
+    attr_real0%object=attr_get_object(attr_name) 
+    attr_real0%name=attr_name
+    attr_real0%type=real0
+    attr_real0%real0_ptr=>value
+    
+  END FUNCTION attr_real0
+
+  FUNCTION attr_real1(attr_name,value) 
+  USE mod_stdtype
+    IMPLICIT NONE
+    INTEGER :: attr_name
+    REAL,TARGET :: value(:)
+    
+    TYPE(attribut) :: attr_real1
+    attr_real1%object=attr_get_object(attr_name) 
+    attr_real1%name=attr_name
+    attr_real1%type=real1
+    attr_real1%real1_ptr=>value
+    
+  END FUNCTION attr_real1    
+
+  FUNCTION attr_real2(attr_name,value) 
+  USE mod_stdtype
+    IMPLICIT NONE
+    INTEGER :: attr_name
+    REAL,TARGET :: value(:,:)
+    
+    TYPE(attribut) :: attr_real2
+    attr_real2%object=attr_get_object(attr_name) 
+    attr_real2%name=attr_name
+    attr_real2%type=REAL2
+    attr_real2%real2_ptr=>value
+    
+  END FUNCTION attr_real2
+  
+    FUNCTION attr_logical0(attr_name,value) 
+  USE mod_stdtype
+    IMPLICIT NONE
+    INTEGER :: attr_name
+    LOGICAL,TARGET :: value
+    
+    TYPE(attribut) :: attr_logical0
+    attr_logical0%object=attr_get_object(attr_name) 
+    attr_logical0%name=attr_name
+    attr_logical0%type=logical0
+    attr_logical0%logical0_ptr=>value
+    
+  END FUNCTION attr_logical0
+
+  FUNCTION attr_logical1(attr_name,value) 
+  USE mod_stdtype
+    IMPLICIT NONE
+    INTEGER :: attr_name
+    LOGICAL,TARGET :: value(:)
+    
+    TYPE(attribut) :: attr_logical1
+    attr_logical1%object=attr_get_object(attr_name) 
+    attr_logical1%name=attr_name
+    attr_logical1%type=logical1
+    attr_logical1%logical1_ptr=>value
+    
+  END FUNCTION attr_logical1    
+
+  FUNCTION attr_logical2(attr_name,value) 
+  USE mod_stdtype
+    IMPLICIT NONE
+    INTEGER :: attr_name
+    LOGICAL,TARGET :: value(:,:)
+    
+    TYPE(attribut) :: attr_logical2
+    attr_logical2%object=attr_get_object(attr_name) 
+    attr_logical2%name=attr_name
+    attr_logical2%type=logical2
+    attr_logical2%logical2_ptr=>value
+    
+  END FUNCTION attr_logical2
+  
+
+  FUNCTION attr_string0(attr_name,value) 
+  USE mod_stdtype
+    IMPLICIT NONE
+    INTEGER :: attr_name
+    CHARACTER(LEN=*),TARGET :: value
+    TYPE(attribut) :: attr_string0
+
+      attr_string0%object=attr_get_object(attr_name) 
+      attr_string0%name=attr_name
+      attr_string0%type=string0
+      attr_string0%string_len=LEN(value)
+      attr_string0%string0_ptr=>value
+    
+  END FUNCTION attr_string0
+
+  FUNCTION attr_string1(attr_name,value) 
+  USE mod_stdtype
+    IMPLICIT NONE
+    INTEGER :: attr_name
+    CHARACTER(LEN=*),TARGET :: value(:)
+    
+    TYPE(attribut) :: attr_string1
+    attr_string1%object=attr_get_object(attr_name) 
+    attr_string1%name=attr_name
+    attr_string1%type=string1
+    attr_string1%string_len=LEN(value)
+    attr_string1%string1_ptr=>value
+    
+  END FUNCTION attr_string1    
+
+  FUNCTION attr_string2(attr_name,value) 
+  USE mod_stdtype
+    IMPLICIT NONE
+    INTEGER :: attr_name
+    CHARACTER(LEN=*),TARGET :: value(:,:)
+    
+    TYPE(attribut) :: attr_string2
+    attr_string2%object=attr_get_object(attr_name) 
+    attr_string2%name=attr_name
+    attr_string2%type=string2
+    attr_string2%string_len=LEN(value)
+    attr_string2%string2_ptr=>value
+    
+  END FUNCTION attr_string2
+ 
+END MODULE mod_attribut
Index: /vendors/XMLIO_SERVER/current/src/XMLIO/mod_attribut_list.f90
===================================================================
--- /vendors/XMLIO_SERVER/current/src/XMLIO/mod_attribut_list.f90	(revision 1897)
+++ /vendors/XMLIO_SERVER/current/src/XMLIO/mod_attribut_list.f90	(revision 1897)
@@ -0,0 +1,7 @@
+MODULE mod_attribut_list
+  USE mod_field_attribut
+  USE mod_file_attribut
+  USE mod_axis_attribut
+  USE mod_grid_attribut
+  USE mod_zoom_attribut
+END MODULE mod_attribut_list
Index: /vendors/XMLIO_SERVER/current/src/XMLIO/mod_axis.f90
===================================================================
--- /vendors/XMLIO_SERVER/current/src/XMLIO/mod_axis.f90	(revision 1897)
+++ /vendors/XMLIO_SERVER/current/src/XMLIO/mod_axis.f90	(revision 1897)
@@ -0,0 +1,332 @@
+MODULE mod_axis
+
+  USE mod_xmlio_parameters
+  USE mod_sorted_list
+
+  
+  IMPLICIT NONE
+
+  TYPE, PUBLIC :: axis
+    CHARACTER(len=str_len)      :: id
+    LOGICAL                     :: has_id
+    CHARACTER(len=str_len)      :: name
+    LOGICAL                     :: has_name
+    INTEGER                     :: size
+    LOGICAL                     :: has_size
+    CHARACTER(len=str_len)      :: description
+    LOGICAL                     :: has_description
+    CHARACTER(len=str_len)      :: unit
+    LOGICAL                     :: has_unit
+    LOGICAL                     :: positive
+    LOGICAL                     :: has_positive
+    REAL, DIMENSION(:), POINTER :: values
+    LOGICAL                     :: has_values
+
+  END TYPE axis
+
+  INCLUDE 'vector_axis_def.inc'
+  
+  TYPE(vector_axis),POINTER,SAVE             :: axis_Ids
+  TYPE(sorted_list),POINTER,SAVE,PRIVATE     :: Ids 
+
+  INTERFACE axis__set_attribut
+    MODULE PROCEDURE axis__set_attribut_id,axis__set_attribut_pt
+  END INTERFACE
+
+CONTAINS
+  INCLUDE 'vector_axis_contains.inc'
+
+  SUBROUTINE axis__swap_context(saved_axis_Ids,saved_Ids)
+  IMPLICIT NONE
+    TYPE(vector_axis),POINTER          :: saved_axis_Ids
+    TYPE(sorted_list),POINTER          :: saved_Ids 
+    
+    axis_ids=>saved_axis_ids
+    ids=>saved_ids
+    
+  END SUBROUTINE axis__swap_context
+
+  SUBROUTINE axis__init
+  IMPLICIT NONE
+    
+    CALL vector_axis__new(axis_Ids)
+    CALL sorted_list__new(Ids)
+   
+  END SUBROUTINE axis__init
+  
+  SUBROUTINE axis__get(Id,Pt_axis)
+  USE string_function
+  IMPLICIT NONE
+    CHARACTER(LEN=*),INTENT(IN)     :: Id
+    TYPE(axis),POINTER              :: Pt_axis
+
+    INTEGER                         :: Pos
+    LOGICAL                         :: success
+    
+    CALL sorted_list__find(Ids,hash(Id),Pos,success)
+    IF (success) THEN
+      Pt_axis=>axis_ids%at(Pos)%Pt
+    ELSE
+      Pt_axis=>NULL()
+    ENDIF
+    
+  END SUBROUTINE axis__get
+  
+  SUBROUTINE axis__new(pt_axis,Id)
+  USE string_function
+  IMPLICIT NONE
+   TYPE(axis), POINTER           :: pt_axis
+   CHARACTER(LEN=*),OPTIONAL     :: Id
+   INTEGER                       :: Pos
+   
+   pt_axis%has_id          = .FALSE.
+   pt_axis%has_name        = .FALSE.
+   pt_axis%has_size        = .FALSE.
+   pt_axis%has_description = .FALSE.
+   pt_axis%has_unit        = .FALSE.
+   pt_axis%has_values      = .FALSE.
+   pt_axis%has_positive    = .FALSE. 
+     
+   IF (PRESENT(Id)) THEN
+     Pt_axis%id=TRIM(ADJUSTL(Id))
+     Pt_axis%has_id=.TRUE.
+     CALL vector_axis__set_new(axis_Ids,Pt_axis,Pos)
+     CALL sorted_list__Add(Ids,hash(id),Pos)
+   ENDIF
+
+ END SUBROUTINE axis__new
+
+  SUBROUTINE axis__set(pt_axis, name, description, unit, a_size, values, positive)
+  IMPLICIT NONE
+    TYPE(axis), POINTER         :: pt_axis
+    CHARACTER(len=*)  ,OPTIONAL :: name
+    CHARACTER(len=*)  ,OPTIONAL :: description
+    CHARACTER(len=*)  ,OPTIONAL :: unit
+    INTEGER           ,OPTIONAL :: a_size
+    REAL, DIMENSION(:),OPTIONAL :: values
+    LOGICAL           ,OPTIONAL :: positive
+
+    IF (PRESENT(name)) THEN
+        pt_axis%name=TRIM(ADJUSTL(name))
+        pt_axis%has_name = .TRUE.
+    ENDIF
+
+    IF (PRESENT(description)) THEN
+        pt_axis%description=TRIM(ADJUSTL(description))
+        pt_axis%has_description = .TRUE.
+    ENDIF
+ 
+    IF (PRESENT(unit)) then
+        pt_axis%unit=TRIM(ADJUSTL(unit))
+        pt_axis%has_unit = .TRUE.
+    ENDIF
+
+    IF (PRESENT(a_size)) then
+        pt_axis%size=a_size
+        pt_axis%has_size = .TRUE.
+    ENDIF
+    
+    IF (PRESENT(values)) then
+        IF (pt_axis%has_values) DEALLOCATE(pt_axis%values)  
+        ALLOCATE(pt_axis%values(size(values)))
+        pt_axis%values(:)=values(:)
+        pt_axis%has_values = .TRUE.
+    ENDIF
+
+    IF (PRESENT(positive)) then
+        pt_axis%positive=positive
+        pt_axis%has_positive = .TRUE.
+    ENDIF
+
+  END SUBROUTINE axis__set
+
+  SUBROUTINE axis__set_attribut_id(id,attrib,ok)
+  USE mod_attribut
+  USE error_msg
+  IMPLICIT NONE
+    CHARACTER(LEN=*),INTENT(IN)   :: id
+    TYPE(attribut),INTENT(IN)     :: attrib
+    LOGICAL,OPTIONAL,INTENT(OUT)  :: ok
+    
+    TYPE(axis),POINTER              :: Pt_axis
+    INTEGER                         :: Pos
+    LOGICAL                         :: success
+    
+    CALL sorted_list__find(Ids,hash(Id),Pos,success)
+    IF (success) THEN
+      Pt_axis=>axis_ids%at(Pos)%Pt
+      CALL axis__set_attribut_pt(Pt_axis,attrib)
+      IF (PRESENT(OK)) OK=.TRUE.
+    ELSE
+      IF (.NOT.PRESENT(OK)) THEN
+        WRITE(message,*) 'axis id :',id,'is undefined'
+        CALL error('mod_axis::axis__set_attribut')
+      ELSE
+        OK=.FALSE.
+      ENDIF
+    ENDIF  
+  
+  END SUBROUTINE axis__set_attribut_id
+      
+  SUBROUTINE axis__set_attribut_pt(Pt_axis,attrib)
+  USE mod_attribut
+  USE mod_axis_attribut
+  USE error_msg
+  IMPLICIT NONE
+    TYPE(axis),POINTER        :: Pt_axis
+    TYPE(attribut),INTENT(IN) :: attrib
+    
+    SELECT CASE(attrib%name)
+      CASE (axis__name)
+        IF (attrib%type==string0) CALL  axis__set(pt_axis,name=attrib%string0_ptr) ; RETURN
+      CASE (axis__description)
+        IF (attrib%type==string0) CALL  axis__set(pt_axis,description=attrib%string0_ptr) ; RETURN
+      CASE (axis__unit)
+        IF (attrib%type==string0) CALL  axis__set(pt_axis,unit=attrib%string0_ptr) ; RETURN
+      CASE (axis__size)
+        IF (attrib%type==integer0) CALL  axis__set(pt_axis,a_size=attrib%integer0_ptr) ; RETURN
+      CASE (axis__values)
+        IF (attrib%type==real1) CALL  axis__set(pt_axis,values=attrib%real1_ptr) ; RETURN
+      CASE (axis__positive)
+        IF (attrib%type==logical0) CALL  axis__set(pt_axis,positive=attrib%logical0_ptr) ; RETURN
+       END SELECT
+
+     WRITE(message,*) 'axis attribut ',attrib%name,' : type :',attrib%type,   &
+                      ' : Attribute type is incompatible with the provided value'
+     CALL error('mod_axis::axis__set_attribut')
+    
+  END SUBROUTINE axis__set_attribut_pt
+  
+  SUBROUTINE axis__print(pt_axis)
+  IMPLICIT NONE
+    TYPE(axis), POINTER         :: pt_axis
+
+    PRINT *,"---- AXIS ----"
+    IF (pt_axis%has_id) THEN
+      PRINT *,"id = ",TRIM(pt_axis%id)
+    ELSE
+      PRINT *,"id undefined"
+    ENDIF
+    
+    IF (pt_axis%has_name) THEN
+      PRINT *,"name = ",TRIM(pt_axis%name)
+    ELSE
+      PRINT *,"name undefined"
+    ENDIF
+    
+    IF (pt_axis%has_description) THEN
+      PRINT *,"description = ",TRIM(pt_axis%description)
+    ELSE
+      PRINT *,"description undefined"
+    ENDIF
+ 
+    IF (pt_axis%has_unit) THEN
+      PRINT *,"unit = ",TRIM(pt_axis%unit)
+    ELSE
+      PRINT *,"unit undefined"
+    ENDIF
+
+    IF (pt_axis%has_size) THEN
+      PRINT *,"size = ",pt_axis%size
+    ELSE
+      PRINT *,"size undefined"
+    ENDIF
+
+    IF (pt_axis%has_values) THEN
+      PRINT *,"values = ",pt_axis%values
+    ELSE
+      PRINT *,"values undefined"
+    ENDIF
+
+    IF (pt_axis%has_positive) THEN
+      PRINT *,"positive = ",pt_axis%positive
+    ELSE
+      PRINT *,"positive undefined"
+    ENDIF
+
+  END SUBROUTINE axis__print
+
+
+  SUBROUTINE axis__apply_default(pt_axis_default, pt_axis_in, pt_axis_out)
+
+    TYPE(axis), POINTER :: pt_axis_default, pt_axis_in, pt_axis_out
+
+    IF (pt_axis_in%has_name) THEN
+        pt_axis_out%name=pt_axis_in%name
+        pt_axis_out%has_name=.TRUE.
+    ELSE IF ( pt_axis_default%has_name) THEN
+        pt_axis_out%name=pt_axis_default%name
+        pt_axis_out%has_name=.TRUE.
+    ELSE
+        pt_axis_out%has_name=.FALSE.
+    ENDIF
+        
+    IF (pt_axis_in%has_description) THEN
+        pt_axis_out%description=pt_axis_in%description
+        pt_axis_out%has_description=.TRUE.
+    ELSE IF ( pt_axis_default%has_description ) THEN
+        pt_axis_out%description=pt_axis_default%description
+        pt_axis_out%has_description=.TRUE.
+    ELSE
+        pt_axis_out%has_description=.FALSE.
+    ENDIF
+
+    IF (pt_axis_in%has_unit) THEN
+        pt_axis_out%unit=pt_axis_in%unit
+        pt_axis_out%has_unit=.TRUE.
+    ELSE IF ( pt_axis_default%has_unit ) THEN
+        pt_axis_out%unit=pt_axis_default%unit
+        pt_axis_out%has_unit=.TRUE.
+    ELSE
+        pt_axis_out%has_unit=.FALSE.
+    ENDIF
+
+    IF (pt_axis_in%has_size) THEN
+        pt_axis_out%size=pt_axis_in%size
+        pt_axis_out%has_size=.TRUE.
+    ELSE IF ( pt_axis_default%has_size ) THEN
+        pt_axis_out%size=pt_axis_default%size
+        pt_axis_out%has_size=.TRUE.
+    ELSE
+        pt_axis_out%has_size=.FALSE.
+    ENDIF
+
+    IF (pt_axis_in%has_values) THEN
+        pt_axis_out%values(:)=pt_axis_in%values(:)
+        pt_axis_out%has_values=.TRUE.
+    ELSE IF ( pt_axis_default%has_values ) THEN
+        pt_axis_out%values(:)=pt_axis_default%values(:)
+        pt_axis_out%has_values=.TRUE.
+    ELSE
+        pt_axis_out%has_values=.FALSE.
+    ENDIF
+
+    IF (pt_axis_in%has_positive) THEN
+        pt_axis_out%positive=pt_axis_in%positive
+        pt_axis_out%has_positive=.TRUE.
+    ELSE IF ( pt_axis_default%has_positive ) THEN
+        pt_axis_out%positive=pt_axis_default%positive
+        pt_axis_out%has_positive=.TRUE.
+    ELSE
+        pt_axis_out%has_positive=.FALSE.
+    ENDIF
+    
+  END SUBROUTINE axis__apply_default
+
+  SUBROUTINE axis__check(pt_axis)
+  USE error_msg
+  IMPLICIT NONE
+    TYPE(axis), POINTER :: pt_axis
+      
+    IF (.NOT. pt_axis%has_name) THEN
+      IF (pt_axis%has_id) THEN
+        pt_axis%name=TRIM(pt_axis%id)
+      ELSE
+        WRITE(message,*) "Axis has no name and no id" 
+        CALL error("mod_axis::axis__check")
+      ENDIF 
+    ENDIF
+ 
+ END SUBROUTINE axis__Check
+
+END MODULE mod_axis
Index: /vendors/XMLIO_SERVER/current/src/XMLIO/mod_axis_attribut.f90
===================================================================
--- /vendors/XMLIO_SERVER/current/src/XMLIO/mod_axis_attribut.f90	(revision 1897)
+++ /vendors/XMLIO_SERVER/current/src/XMLIO/mod_axis_attribut.f90	(revision 1897)
@@ -0,0 +1,15 @@
+MODULE mod_axis_attribut
+  USE mod_object
+  
+  INTEGER,PARAMETER :: axis__begin = axis_object + 10
+  
+  INTEGER,PARAMETER :: axis__name = axis_object + 11
+  INTEGER,PARAMETER :: axis__description = axis_object + 12
+  INTEGER,PARAMETER :: axis__unit = axis_object + 13
+  INTEGER,PARAMETER :: axis__size = axis_object + 14
+  INTEGER,PARAMETER :: axis__positive = axis_object + 15
+  INTEGER,PARAMETER :: axis__values = axis_object + 16
+
+  INTEGER,PARAMETER :: axis__end = axis_object + 17
+  
+END MODULE mod_axis_attribut
Index: /vendors/XMLIO_SERVER/current/src/XMLIO/mod_axis_definition.f90
===================================================================
--- /vendors/XMLIO_SERVER/current/src/XMLIO/mod_axis_definition.f90	(revision 1897)
+++ /vendors/XMLIO_SERVER/current/src/XMLIO/mod_axis_definition.f90	(revision 1897)
@@ -0,0 +1,24 @@
+MODULE mod_axis_definition
+  USE mod_axis_group
+  
+  TYPE(axis_group),SAVE,POINTER :: axis_definition
+  
+CONTAINS
+
+  SUBROUTINE axis_definition__swap_context(saved_axis_definition)      
+  IMPLICIT NONE
+    TYPE(axis_group),POINTER :: saved_axis_definition
+    
+    axis_definition=>saved_axis_definition
+    
+  END SUBROUTINE axis_definition__swap_context 
+
+  SUBROUTINE axis_definition__Init
+  USE mod_axis_group
+  IMPLICIT NONE
+  
+    CALL axis_group__new(axis_definition,"axis_definition")
+    
+  END SUBROUTINE axis_definition__Init
+        
+END MODULE mod_axis_definition
Index: /vendors/XMLIO_SERVER/current/src/XMLIO/mod_axis_group.f90
===================================================================
--- /vendors/XMLIO_SERVER/current/src/XMLIO/mod_axis_group.f90	(revision 1897)
+++ /vendors/XMLIO_SERVER/current/src/XMLIO/mod_axis_group.f90	(revision 1897)
@@ -0,0 +1,242 @@
+MODULE mod_axis_group
+  USE mod_axis
+  USE mod_xmlio_parameters
+
+  IMPLICIT NONE
+
+  TYPE axis_group
+    CHARACTER(LEN=str_len)                    :: id
+    LOGICAL                                   :: has_id
+    TYPE(vector_axis_group), POINTER          :: groups
+    TYPE(vector_axis),POINTER                 :: axis     
+    TYPE(axis), POINTER                       :: default_attribut
+  END TYPE axis_group
+
+  INCLUDE "vector_axis_group_def.inc"  
+
+  TYPE(vector_axis_group),POINTER       :: axis_group_Ids
+  TYPE(sorted_list),POINTER,PRIVATE     :: Ids 
+
+  INTERFACE axis_group__set_attribut
+    MODULE PROCEDURE axis_group__set_attribut_id,axis_group__set_attribut_pt
+  END INTERFACE
+
+CONTAINS
+
+  INCLUDE "vector_axis_group_contains.inc"
+
+  SUBROUTINE axis_group__swap_context(saved_axis_group_Ids,saved_ids)
+  IMPLICIT NONE
+  TYPE(vector_axis_group),POINTER       :: saved_axis_group_Ids
+  TYPE(sorted_list),POINTER             :: saved_Ids 
+   
+   axis_group_ids=>saved_axis_group_ids
+   ids=>saved_ids
+   
+  END SUBROUTINE axis_group__swap_context
+
+  SUBROUTINE axis_group__init
+  IMPLICIT NONE
+    
+    CALL vector_axis_group__new(axis_group_Ids)
+    CALL sorted_list__new(Ids)
+   
+  END SUBROUTINE axis_group__init
+
+  SUBROUTINE axis_group__get(Id,Pt_ag)
+  USE string_function
+  IMPLICIT NONE
+    CHARACTER(LEN=*),INTENT(IN)     :: Id
+    TYPE(axis_group),POINTER        :: Pt_ag
+
+    INTEGER                         :: Pos
+    LOGICAL                         :: success
+    
+    CALL sorted_list__find(Ids,hash(Id),Pos,success)
+    IF (success) THEN
+      Pt_ag=>axis_group_ids%at(Pos)%Pt
+    ELSE
+      Pt_ag=>NULL()
+    ENDIF
+    
+  END SUBROUTINE axis_group__get
+
+
+  SUBROUTINE axis_group__set_attribut_id(id,attrib,Ok)
+  USE mod_attribut
+  USE error_msg
+  IMPLICIT NONE
+    CHARACTER(LEN=*),INTENT(IN) :: id
+    TYPE(attribut),INTENT(IN) :: attrib
+    LOGICAL,OPTIONAL,INTENT(out)  :: Ok
+    
+    TYPE(axis_group),POINTER             :: Pt_ag
+    INTEGER                         :: Pos
+    LOGICAL                         :: success
+    
+    CALL sorted_list__find(Ids,hash(Id),Pos,success)
+    IF (success) THEN
+      Pt_ag=>axis_group_ids%at(Pos)%Pt
+      CALL axis_group__set_attribut(Pt_ag,attrib)
+      IF (PRESENT(OK)) ok=.TRUE.
+    ELSE
+      IF (.NOT.PRESENT(OK)) THEN
+        WRITE(message,*) 'axis group id :',id,'is undefined'
+        CALL error('mod_axis_group::axis_group__set_attribut')
+      ELSE
+        OK=.FALSE.
+      ENDIF
+    ENDIF 
+    
+  END SUBROUTINE axis_group__set_attribut_id
+  
+  SUBROUTINE axis_group__set_attribut_pt(pt_ag,attrib)
+  USE mod_attribut
+  USE mod_object
+  IMPLICIT NONE
+    TYPE(axis_group),POINTER :: Pt_ag
+    TYPE(attribut),INTENT(IN) :: attrib
+     
+    IF (attrib%object==axis_object) THEN
+      CALL axis__set_attribut(pt_ag%default_attribut,attrib)
+    ENDIF
+    
+  END SUBROUTINE axis_group__set_attribut_pt
+      
+  RECURSIVE SUBROUTINE axis_group__new(Pt_ag,Id)
+  USE string_function
+  IMPLICIT NONE
+    TYPE(axis_group),POINTER                :: Pt_ag
+    CHARACTER(LEN=*),OPTIONAL,INTENT(IN)     :: Id
+    
+    INTEGER :: Pos
+    
+    ALLOCATE(Pt_ag%groups)
+    ALLOCATE(Pt_ag%axis)
+    ALLOCATE(Pt_ag%default_attribut)
+    
+    CALL vector_axis_group__new(Pt_ag%groups)
+    CALL vector_axis__new(Pt_ag%axis)
+    CALL axis__new(Pt_ag%default_attribut)
+    Pt_ag%has_id=.FALSE.
+      
+    IF (PRESENT(Id)) THEN
+      Pt_ag%id=TRIM(Id)
+      Pt_ag%has_id=.TRUE.
+      CALL vector_axis_group__set_new(axis_group_Ids,Pt_ag,Pos)
+      CALL sorted_list__Add(Ids,hash(id),Pos)
+    ENDIF
+
+  END SUBROUTINE axis_group__new
+
+      
+  SUBROUTINE axis_group__get_new_group(Pt_ag,Pt_ag_out,Id)
+  IMPLICIT NONE
+    TYPE(axis_group),POINTER             :: Pt_ag
+    TYPE(axis_group),POINTER             :: Pt_ag_out
+    CHARACTER(LEN=*),OPTIONAL      :: Id
+    
+    CALL vector_axis_group__get_new(Pt_ag%groups,Pt_ag_out)
+    CALL axis_group__new(Pt_ag_out)
+
+    IF (PRESENT(id)) THEN
+      CALL axis_group__new(Pt_ag_out,Id)
+    ELSE
+      CALL axis_group__new(Pt_ag_out)
+    ENDIF
+    
+  END SUBROUTINE axis_group__get_new_group
+
+  
+  SUBROUTINE axis_group__get_new_axis(Pt_ag,Pt_a_out,Id)
+  IMPLICIT NONE
+    TYPE(axis_group),POINTER            :: Pt_ag
+    TYPE(axis),POINTER                  :: Pt_a_out
+    CHARACTER(LEN=*),OPTIONAL      :: Id
+    
+    CALL vector_axis__get_new(Pt_ag%axis,Pt_a_out)
+    
+    IF (PRESENT(id)) THEN
+      CALL axis__new(Pt_a_out,Id)
+    ELSE
+      CALL axis__new(Pt_a_out)
+    ENDIF
+    
+  END SUBROUTINE axis_group__get_new_axis
+  
+  
+  SUBROUTINE axis_group__get_default_attrib(Pt_ag,Pt_a)
+  IMPLICIT NONE
+    TYPE(axis_group),POINTER  :: Pt_ag
+    TYPE(axis),POINTER        :: Pt_a
+    
+    Pt_a=>Pt_ag%default_attribut
+  END SUBROUTINE axis_group__get_default_attrib
+  
+  RECURSIVE SUBROUTINE axis_group__apply_default(Pt_ag,default)
+  IMPLICIT NONE
+    TYPE(axis_group),POINTER           :: Pt_ag
+    TYPE(axis),POINTER,OPTIONAL        :: default
+    INTEGER :: i
+    
+    IF (PRESENT(default)) THEN
+      CALL axis__apply_default(default,Pt_ag%default_attribut,Pt_ag%default_attribut)
+    ENDIF
+      
+    DO i=1,Pt_ag%groups%size
+      CALL axis_group__apply_default(Pt_ag%groups%at(i)%pt,Pt_ag%default_attribut)
+    ENDDO
+    
+    DO i=1,Pt_ag%axis%size
+      CALL axis__apply_default(Pt_ag%default_attribut,Pt_ag%axis%at(i)%pt,Pt_ag%axis%at(i)%pt)
+    ENDDO
+  
+  END SUBROUTINE axis_group__apply_default
+
+  RECURSIVE SUBROUTINE axis_group__print(Pt_ag)
+  IMPLICIT NONE
+    TYPE(axis_group),POINTER  :: Pt_ag
+   
+    INTEGER :: i
+    
+    PRINT *,"--- AXIS GROUP ---"
+    IF (pt_ag%has_id) THEN
+      PRINT *,"id = ",TRIM(pt_ag%id)
+    ELSE
+      PRINT *,"id undefined"
+    ENDIF
+    
+    PRINT *,"axis default attribut :"
+    CALL axis__print(Pt_ag%default_attribut)    
+
+    PRINT *,"owned axis groups :",Pt_ag%groups%size      
+    DO i=1,Pt_ag%groups%size
+      CALL axis_group__print(Pt_ag%groups%at(i)%pt)
+    ENDDO
+
+    PRINT *,"owned axis :",Pt_ag%axis%size      
+    DO i=1,Pt_ag%axis%size
+      CALL axis__print(Pt_ag%axis%at(i)%pt)
+    ENDDO
+    PRINT *,"------------"
+    
+  END SUBROUTINE axis_group__print
+
+  RECURSIVE SUBROUTINE axis_group__Check(Pt_ag)
+  IMPLICIT NONE
+  
+    TYPE(axis_group),POINTER  :: Pt_ag
+    INTEGER :: i
+   
+    DO i=1,Pt_ag%groups%size
+      CALL axis_group__check(pt_ag%groups%at(i)%pt)
+    ENDDO
+
+    DO i=1,Pt_ag%axis%size
+      CALL axis__check(pt_ag%axis%at(i)%pt)
+    ENDDO
+  
+  END SUBROUTINE axis_group__check     
+   
+END MODULE mod_axis_group
+
Index: /vendors/XMLIO_SERVER/current/src/XMLIO/mod_context.f90
===================================================================
--- /vendors/XMLIO_SERVER/current/src/XMLIO/mod_context.f90	(revision 1897)
+++ /vendors/XMLIO_SERVER/current/src/XMLIO/mod_context.f90	(revision 1897)
@@ -0,0 +1,233 @@
+MODULE mod_context
+  USE mod_xmlio_parameters
+  USE mod_sorted_list
+  USE mod_field
+  USE mod_field_group
+  USE mod_field_definition
+  USE mod_file
+  USE mod_file_group
+  USE mod_file_definition
+  USE mod_grid
+  USE mod_zoom
+  USE mod_grid_group
+  USE mod_grid_definition
+  USE mod_axis
+  USE mod_axis_group
+  USE mod_axis_definition
+  USE mod_dependency
+  USE mod_time_parameters
+
+
+  INTERFACE context__swap
+    MODULE PROCEDURE context__swap_id,context__swap_pt
+  END INTERFACE  
+  
+  TYPE, PUBLIC :: context
+    CHARACTER(len=str_len)         :: id
+    INTEGER                        :: number
+  
+    TYPE(vector_field),POINTER        :: field__field_Ids
+    TYPE(sorted_list),POINTER         :: field__Ids
+    TYPE(vector_field_group),POINTER  :: field_group__field_group_ids
+    TYPE(sorted_list),POINTER         :: field_group__Ids
+    TYPE(field_group),POINTER         :: field_definition__field_def
+    TYPE(vector_file),POINTER         :: file__file_Ids
+    TYPE(sorted_list),POINTER         :: file__Ids
+    TYPE(vector_file_group),POINTER   :: file_group__file_group_Ids
+    TYPE(sorted_list),POINTER         :: file_group__Ids 
+    TYPE(file_group),POINTER          :: file_definition__file_def 
+    TYPE(vector_grid),POINTER         :: grid__grid_Ids
+    TYPE(sorted_list),POINTER         :: grid__Ids 
+    TYPE(vector_zoom),POINTER         :: zoom__zoom_Ids
+    TYPE(sorted_list),POINTER         :: zoom__Ids 
+    TYPE(vector_grid_group),POINTER   :: grid_group__grid_group_Ids
+    TYPE(sorted_list),POINTER         :: grid_group__Ids 
+    TYPE(grid_group),POINTER          :: grid_definition__grid_def
+    TYPE(vector_axis),POINTER         :: axis__axis_Ids
+    TYPE(sorted_list),POINTER         :: axis__Ids 
+    TYPE(vector_axis_group),POINTER   :: axis_group__axis_group_Ids
+    TYPE(sorted_list),POINTER         :: axis_group__Ids 
+    TYPE(axis_group),POINTER          :: axis_definition__axis_def
+    TYPE(vector_file_dep),POINTER     :: dependency__file_enabled
+    TYPE(vector_field_out),POINTER    :: dependency__field_enabled 
+    TYPE(vector_field_dep),POINTER    :: dependency__field_id
+    TYPE(sorted_list),POINTER         :: dependency__sorted_id 
+    INTEGER,POINTER                   :: time_param__initial_timestep
+    REAL,POINTER                      :: time_param__initial_date
+    REAL,POINTER                      :: time_param__timestep_value 
+    INTEGER,POINTER                   :: time_param__timestep_number
+
+  END TYPE context
+  
+  INCLUDE 'vector_context_def.inc'
+  TYPE(vector_context),SAVE,POINTER  :: context_ids
+  TYPE(sorted_list),POINTER,SAVE,PRIVATE :: Ids
+
+ 
+  CONTAINS
+    INCLUDE 'vector_context_contains.inc'
+    
+    SUBROUTINE context__init
+    IMPLICIT NONE
+
+      ALLOCATE(context_Ids)
+      ALLOCATE(Ids)
+
+      CALL vector_context__new(context_Ids)
+      CALL sorted_list__new(ids)
+
+    END SUBROUTINE context__init
+
+    SUBROUTINE context__get(Id,Pt_context)
+      USE string_function
+      IMPLICIT NONE
+      CHARACTER(LEN=*),INTENT(IN)     :: Id
+      TYPE(context),POINTER              :: Pt_context
+
+      INTEGER                         :: Pos
+      LOGICAL                         :: success
+    
+      CALL sorted_list__find(Ids,hash(Id),Pos,success)
+      IF (success) THEN
+        Pt_context=>context_ids%at(Pos)%Pt
+      ELSE
+        Pt_context=>NULL()
+      ENDIF
+    
+    END SUBROUTINE context__get
+
+    SUBROUTINE context__get_new(Id,pt_context)
+    USE string_function
+    IMPLICIT NONE
+      CHARACTER(LEN=*),INTENT(IN)     :: Id
+      TYPE(context),POINTER              :: Pt_context
+
+      INTEGER                         :: Pos
+      LOGICAL                         :: success
+      
+      CALL sorted_list__find(Ids,hash(Id),Pos,success)
+      IF (success) THEN
+        Pt_context=>context_ids%at(Pos)%Pt
+      ELSE
+        CALL vector_context__get_new(context_ids,pt_context,Pos)
+        pt_context%number=Pos
+        Pt_context%id=Id
+        CALL sorted_list__Add(Ids,hash(Id),Pos)
+        
+        ALLOCATE(pt_context%field__field_Ids )
+        ALLOCATE(pt_context%field__Ids )
+        ALLOCATE(pt_context%field_group__field_group_ids )
+        ALLOCATE(pt_context%field_group__field_group_ids )
+        ALLOCATE(pt_context%field_group__Ids )
+        ALLOCATE(pt_context%field_definition__field_def )
+        ALLOCATE(pt_context%file__file_Ids)
+        ALLOCATE(pt_context%file__Ids)
+        ALLOCATE(pt_context%file_group__file_group_Ids)
+        ALLOCATE(pt_context%file_group__Ids) 
+        ALLOCATE(pt_context%file_definition__file_def) 
+        ALLOCATE(pt_context%grid__grid_Ids)
+        ALLOCATE(pt_context%grid__Ids) 
+        ALLOCATE(pt_context%zoom__zoom_Ids)
+        ALLOCATE(pt_context%zoom__Ids) 
+        ALLOCATE(pt_context%grid_group__grid_group_Ids)
+        ALLOCATE(pt_context%grid_group__Ids) 
+        ALLOCATE(pt_context%grid_definition__grid_def)
+        ALLOCATE(pt_context%axis__axis_Ids)
+        ALLOCATE(pt_context%axis__Ids) 
+        ALLOCATE(pt_context%axis_group__axis_group_Ids)
+        ALLOCATE(pt_context%axis_group__Ids) 
+        ALLOCATE(pt_context%axis_definition__axis_def)
+        ALLOCATE(pt_context%dependency__file_enabled)
+        ALLOCATE(pt_context%dependency__field_enabled) 
+        ALLOCATE(pt_context%dependency__field_id)
+        ALLOCATE(pt_context%dependency__sorted_id)  
+        ALLOCATE(pt_context%time_param__initial_timestep)
+        ALLOCATE(pt_context%time_param__initial_date)
+        ALLOCATE(pt_context%time_param__timestep_value) 
+        ALLOCATE(pt_context%time_param__timestep_number)
+
+        CALL context__swap(pt_context)
+        
+        CALL field__init
+        CALL field_group__Init
+        CALL field_definition__Init
+
+        CALL axis__init
+        CALL axis_group__Init
+        CALL axis_definition__Init
+
+        CALL grid__init
+        CALL grid_group__Init
+        CALL grid_definition__Init
+
+        CALL zoom__init
+
+        CALL file__init
+        CALL file_group__Init
+        CALL file_definition__Init
+
+      ENDIF
+
+    END SUBROUTINE context__get_new
+
+
+    SUBROUTINE context__create(Id)
+    IMPLICIT NONE
+      CHARACTER(LEN=*),INTENT(IN)     :: Id
+      
+      TYPE(context),POINTER              :: Pt_context
+
+      CALL context__get(Id,Pt_context)
+      IF (.NOT. ASSOCIATED(Pt_context)) CALL context__get_new(Id,Pt_context)
+      
+!      CALL field__init
+!      CALL field_group__init
+!      CALL field_definition__init
+      
+     END SUBROUTINE context__create
+
+     
+    SUBROUTINE context__swap_id(Id)
+    USE mod_field
+      IMPLICIT NONE
+      CHARACTER(LEN=*),INTENT(IN)     :: Id
+      TYPE(context),POINTER       :: Pt_context
+
+      INTEGER :: number
+      
+      CALL context__get(Id,Pt_context)
+      IF (.NOT. ASSOCIATED(Pt_context)) THEN
+!!      error message
+      ENDIF
+      
+      CALL context__swap(pt_context)  
+
+    END SUBROUTINE context__swap_id
+
+    SUBROUTINE context__swap_pt(Pt_context)
+    USE mod_field
+      IMPLICIT NONE
+      TYPE(context),POINTER       :: Pt_context
+
+      CALL field__swap_context(Pt_context%field__field_Ids ,Pt_context%field__Ids)
+      CALL field_group__swap_context(Pt_context%field_group__field_group_ids ,Pt_context%field_group__Ids)
+      CALL field_definition__swap_context(Pt_context%field_definition__field_def)
+      CALL file__swap_context(Pt_context%file__file_Ids,Pt_context%file__Ids)
+      CALL file_group__swap_context(Pt_context%file_group__file_group_Ids,Pt_context%file_group__Ids)
+      CALL file_definition__swap_context(Pt_context%file_definition__file_def) 
+      CALL grid__swap_context(pt_context%grid__grid_Ids,pt_context%grid__Ids) 
+      CALL zoom__swap_context(pt_context%zoom__zoom_Ids,pt_context%zoom__Ids) 
+      CALL grid_group__swap_context(pt_context%grid_group__grid_group_Ids,pt_context%grid_group__Ids) 
+      CALL grid_definition__swap_context(pt_context%grid_definition__grid_def)
+      CALL axis__swap_context(pt_context%axis__axis_Ids,pt_context%axis__Ids) 
+      CALL axis_group__swap_context(pt_context%axis_group__axis_group_Ids,pt_context%axis_group__Ids) 
+      CALL axis_definition__swap_context(pt_context%axis_definition__axis_def)
+      CALL dependency__swap_context(pt_context%dependency__file_enabled,pt_context%dependency__field_enabled,  &
+                                    pt_context%dependency__field_id,pt_context%dependency__sorted_id)
+      CALL time_parameters__swap_context(pt_context%time_param__initial_timestep,pt_context%time_param__initial_date,  &
+                                         pt_context%time_param__timestep_value,pt_context%time_param__timestep_number)
+                                    
+    END SUBROUTINE context__swap_pt
+
+
+END MODULE mod_context
Index: /vendors/XMLIO_SERVER/current/src/XMLIO/mod_dependency.f90
===================================================================
--- /vendors/XMLIO_SERVER/current/src/XMLIO/mod_dependency.f90	(revision 1897)
+++ /vendors/XMLIO_SERVER/current/src/XMLIO/mod_dependency.f90	(revision 1897)
@@ -0,0 +1,247 @@
+MODULE mod_dependency
+USE mod_field
+USE mod_file
+USE mod_grid
+USE mod_axis
+USE mod_sorted_list
+USE mod_zoom
+
+TYPE file_dep
+  TYPE(file),POINTER           :: file
+  INTEGER                      :: hash
+  TYPE(vector_field),POINTER   :: fields
+  TYPE(vector_grid),POINTER    :: grids
+  TYPE(vector_zoom),POINTER    :: zooms
+  TYPE(vector_axis),POINTER    :: axis
+END TYPE file_dep
+
+TYPE field_dep
+  TYPE(field),POINTER :: field
+  INTEGER             :: hash
+  
+  TYPE(vector_field_out),POINTER   :: field_out
+END TYPE field_dep
+
+TYPE field_out
+  TYPE(Field), POINTER  :: field
+  TYPE(file),  POINTER  :: file
+  TYPE(axis),  POINTER  :: axis
+  TYPE(grid),  POINTER  :: grid
+  TYPE(zoom),  POINTER  :: zoom
+END TYPE field_out
+
+INCLUDE 'vector_field_dep_def.inc'
+INCLUDE 'vector_file_dep_def.inc'
+INCLUDE 'vector_field_out_def.inc'
+
+TYPE(vector_file_dep),POINTER,SAVE      :: file_enabled
+TYPE(vector_field_out),POINTER,SAVE     :: field_enabled 
+TYPE(vector_field_dep),POINTER,SAVE     :: field_id
+
+ 
+TYPE(sorted_list),POINTER,SAVE :: sorted_id
+
+CONTAINS
+
+INCLUDE 'vector_field_dep_contains.inc'
+INCLUDE 'vector_file_dep_contains.inc'
+INCLUDE 'vector_field_out_contains.inc'
+
+  
+  SUBROUTINE dependency__swap_context(saved_file_enabled,saved_field_enabled,save_field_id,saved_sorted_id)  
+  IMPLICIT NONE
+    TYPE(vector_file_dep),POINTER      :: saved_file_enabled
+    TYPE(vector_field_out),POINTER     :: saved_field_enabled 
+    TYPE(vector_field_dep),POINTER     :: save_field_id
+    TYPE(sorted_list),POINTER          :: saved_sorted_id  
+    
+    file_enabled=>saved_file_enabled   
+    field_enabled=>saved_field_enabled
+    field_id=>save_field_id
+    sorted_id=>saved_sorted_id
+      
+  END SUBROUTINE dependency__swap_context
+  
+  SUBROUTINE set_dependency
+  IMPLICIT NONE
+  
+   CALL set_file_dependency
+   CALL set_field_enabled
+   CALL set_field_dependency
+
+  END SUBROUTINE set_dependency
+  
+  
+  RECURSIVE SUBROUTINE set_file_dependency(Pt_file_group)
+  USE mod_file_definition
+  USE mod_file_group
+  USE string_function
+  USE mod_sorted_list
+  IMPLICIT NONE
+    TYPE (file_group),POINTER,OPTIONAL :: pt_file_group 
+    TYPE (file_group),POINTER          :: Pt_fg
+    TYPE (file)     ,POINTER           :: Pt_file
+    TYPE (file_dep),POINTER            :: Pt_file_dep
+    TYPE (sorted_list),POINTER         :: sorted_axis
+    TYPE (sorted_list),POINTER         :: sorted_grid
+    TYPE (sorted_list),POINTER         :: sorted_zoom
+    INTEGER                            :: i
+    INTEGER                            :: j
+    
+    ALLOCATE(sorted_axis)
+    ALLOCATE(sorted_grid)
+    ALLOCATE(sorted_zoom)
+    
+    IF (PRESENT(Pt_file_group)) THEN
+      Pt_fg=>Pt_file_group
+    ELSE
+      CALL vector_file_dep__new(file_enabled)
+      Pt_fg=>file_definition
+    ENDIF
+    
+    DO i=1,Pt_fg%groups%size
+      CALL set_file_dependency(Pt_fg%groups%at(i)%pt)
+    ENDDO
+    
+    DO i=1,Pt_fg%files%size
+      Pt_file=>pt_fg%files%at(i)%pt
+      IF (Pt_file%enabled) THEN
+        CALL vector_file_dep__get_new(file_enabled,Pt_file_dep)
+        
+        ALLOCATE(Pt_file_dep%fields)
+        ALLOCATE(Pt_file_dep%grids)
+        ALLOCATE(Pt_file_dep%zooms)
+        ALLOCATE(Pt_file_dep%axis)
+        pt_file_dep%file=>pt_file
+        pt_file_dep%hash=hash(pt_file%id)
+        CALL vector_field__new(Pt_file_dep%fields)
+        CALL vector_grid__new(Pt_file_dep%grids)
+        CALL vector_zoom__new(Pt_file_dep%zooms)
+        CALL vector_axis__new(Pt_file_dep%axis)
+        CALL sorted_list__new(sorted_axis)
+        CALL sorted_list__new(sorted_grid)
+        CALL sorted_list__new(sorted_zoom)
+        
+        CALL Treat_field_group(pt_file%field_list)
+        
+        CALL sorted_list__delete(sorted_axis)
+        CALL sorted_list__delete(sorted_grid)
+        CALL sorted_list__delete(sorted_zoom)
+      ENDIF
+    ENDDO
+    
+    CONTAINS 
+      RECURSIVE SUBROUTINE treat_field_group(pt_fg)
+      IMPLICIT NONE  
+        TYPE(field_group),POINTER :: Pt_fg
+        INTEGER                   :: i
+        
+        DO i=1,Pt_fg%groups%size
+          CALL treat_field_group(Pt_fg%groups%at(i)%pt)
+        ENDDO
+        
+        DO i=1,Pt_fg%fields%size
+          CALL treat_field(Pt_fg%fields%at(i)%pt)
+        ENDDO
+      END SUBROUTINE treat_field_group
+      
+      
+      SUBROUTINE treat_field(pt_field)
+      IMPLICIT NONE  
+        TYPE(field),POINTER :: Pt_field
+        LOGICAL             :: found
+        INTEGER             :: Pos
+
+        IF (Pt_field%enabled .AND. Pt_field%level <= Pt_file%output_level) THEN
+          CALL vector_field__set_new(Pt_file_dep%fields,Pt_field)
+  
+          IF (Pt_field%has_grid) THEN
+            CALL sorted_list__find(sorted_grid,hash(Pt_field%grid%id),pos,found)
+            IF (.NOT. found) THEN 
+              CALL vector_grid__set_new(pt_file_dep%grids,Pt_field%grid,pos)
+              CALL sorted_list__add(sorted_grid,hash(Pt_field%grid%id),pos)
+            ENDIF
+          ENDIF
+
+          IF (Pt_field%has_zoom) THEN
+            CALL sorted_list__find(sorted_zoom,hash(Pt_field%zoom%id),pos,found)
+            IF (.NOT. found) THEN 
+              CALL vector_zoom__set_new(pt_file_dep%zooms,Pt_field%zoom,pos)
+              CALL sorted_list__add(sorted_zoom,hash(Pt_field%zoom%id),pos)
+            ENDIF
+          ENDIF
+  
+          IF (Pt_field%has_axis) THEN
+            CALL sorted_list__find(sorted_axis,hash(Pt_field%axis%id),Pos,found)
+            IF (.NOT. found) THEN 
+              CALL vector_axis__set_new(Pt_file_dep%axis,Pt_field%axis,pos)
+              CALL sorted_list__add(sorted_axis,hash(Pt_field%axis%id),pos)
+            ENDIF
+          ENDIF
+        ENDIF
+      
+      END SUBROUTINE treat_field
+      
+  END SUBROUTINE set_file_dependency
+  
+  SUBROUTINE set_field_enabled
+  IMPLICIT NONE
+  TYPE(file_dep),POINTER   :: pt_file_dep
+  TYPE(field_out),POINTER  :: pt_field_out
+  INTEGER                  :: i
+  INTEGER                  :: j
+  
+    CALL vector_field_out__new(field_enabled)
+    
+    DO i=1,file_enabled%size
+      pt_file_dep=>file_enabled%at(i)%pt
+      DO j=1,pt_file_dep%fields%size
+        CALL vector_field_out__get_new(field_enabled,pt_field_out)
+        pt_field_out%field=>pt_file_dep%fields%at(j)%pt
+        pt_field_out%file=>pt_file_dep%file
+        pt_field_out%axis=>pt_field_out%field%axis
+        pt_field_out%grid=>pt_field_out%field%grid
+        pt_field_out%zoom=>pt_field_out%field%zoom
+      ENDDO
+    ENDDO
+   
+      
+  END SUBROUTINE set_field_enabled
+      
+  SUBROUTINE set_field_dependency
+  USE string_function
+  IMPLICIT NONE
+  TYPE(field_out),POINTER :: pt_field_out
+  TYPE(field_dep),POINTER :: pt_field_dep
+  TYPE(field),POINTER     :: pt_field
+  TYPE(field),POINTER     :: pt_field_base
+  INTEGER :: pos
+  LOGICAL :: found
+  INTEGER :: i
+  
+    CALL vector_field_dep__new(field_id)
+    CALL sorted_list__new(sorted_id)
+    
+    DO i=1,field_enabled%size
+      pt_field_out=>field_enabled%at(i)%pt
+      pt_field=>pt_field_out%field
+      pt_field_base=>pt_field%field_base
+      CALL sorted_list__find(sorted_id,hash(pt_field_base%id),pos,found)
+      IF (.NOT. found) THEN
+        CALL vector_field_dep__get_new(field_id,pt_field_dep,pos)
+        ALLOCATE(pt_field_dep%field_out)
+        CALL vector_field_out__new(pt_field_dep%field_out)
+        pt_field_dep%field=>pt_field_base       
+        CALL sorted_list__add(sorted_id,hash(pt_field_base%id),pos)
+      ELSE
+        pt_field_dep=>field_id%at(pos)%pt
+      ENDIF
+      
+      CALL vector_field_out__set_new(pt_field_dep%field_out,pt_field_out) 
+    ENDDO  
+      
+  END SUBROUTINE set_field_dependency     
+      
+    
+    
+END MODULE mod_dependency
Index: /vendors/XMLIO_SERVER/current/src/XMLIO/mod_domain.f90
===================================================================
--- /vendors/XMLIO_SERVER/current/src/XMLIO/mod_domain.f90	(revision 1897)
+++ /vendors/XMLIO_SERVER/current/src/XMLIO/mod_domain.f90	(revision 1897)
@@ -0,0 +1,172 @@
+MODULE mod_domain
+   USE mod_xmlio_parameters
+   INTEGER, PARAMETER :: box=1
+   INTEGER, PARAMETER :: orange=2
+   
+  TYPE domain
+    INTEGER :: rank
+    INTEGER :: ni
+    INTEGER :: nj
+    INTEGER :: ibegin
+    INTEGER :: iend
+    INTEGER :: jbegin
+    INTEGER :: jend
+    REAL,POINTER :: lon(:,:)
+    REAL,POINTER :: lat(:,:)
+    
+    INTEGER         :: type
+    LOGICAL,POINTER :: mask(:)
+    INTEGER,POINTER :: i_index(:)
+    INTEGER,POINTER :: j_index(:)
+    INTEGER         :: nbp
+    LOGICAL         :: is_defined
+  END TYPE domain
+ 
+  INCLUDE 'vector_domain_def.inc'
+
+CONTAINS
+
+  INCLUDE 'vector_domain_contains.inc'
+
+  SUBROUTINE domain__new(Pt_domain)
+  IMPLICIT NONE
+    TYPE(domain),POINTER  :: Pt_domain
+    
+    Pt_domain%is_defined=.FALSE.
+    
+  END SUBROUTINE domain__new
+  
+  SUBROUTINE domain__set(Pt_domain,rank,ni,nj,ibegin,jbegin,lon,lat)
+  IMPLICIT NONE
+    TYPE(domain),POINTER  :: Pt_domain
+    INTEGER,INTENT(IN) :: rank
+    INTEGER,INTENT(IN) :: ni
+    INTEGER,INTENT(IN) :: nj
+    INTEGER,INTENT(IN) :: ibegin
+    INTEGER,INTENT(IN) :: jbegin
+    REAL,INTENT(IN)    :: lon(ni,nj)
+    REAL,INTENT(IN)    :: lat(ni,nj)
+
+    Pt_domain%rank=rank
+    Pt_domain%ni=ni
+    Pt_domain%nj=nj
+    Pt_domain%ibegin=ibegin
+    Pt_domain%jbegin=jbegin   
+    Pt_domain%iend=ibegin+ni-1
+    Pt_domain%jend=jbegin+nj-1
+    ALLOCATE(Pt_domain%lon(ni,nj))
+    ALLOCATE(Pt_domain%lat(ni,nj))
+    Pt_domain%lon(:,:)=lon(:,:)
+    Pt_domain%lat(:,:)=lat(:,:)
+    Pt_domain%is_defined=.TRUE.
+  END SUBROUTINE domain__set
+
+
+  SUBROUTINE domain__set_type_box(Pt_domain,mask)
+  USE error_msg
+  IMPLICIT NONE
+    TYPE(domain),POINTER  :: Pt_domain
+    LOGICAL,INTENT(IN),OPTIONAL :: mask(:,:)
+    INTEGER                     :: i,j
+  
+    Pt_domain%type=box
+    pt_domain%nbp=pt_domain%ni*pt_domain%nj
+    ALLOCATE(Pt_domain%i_index(pt_domain%nbp))
+    ALLOCATE(Pt_domain%j_index(pt_domain%nbp))
+    ALLOCATE(pt_domain%mask(pt_domain%nbp))
+
+    IF (PRESENT(mask)) THEN
+      IF ( size(mask,1)==pt_domain%ni .AND. size(mask,2)==pt_domain%nj) THEN
+        DO i=1,pt_domain%ni
+          DO j=1,pt_domain%nj
+            pt_domain%mask((j-1)*pt_domain%ni+i)=mask(i,j)
+          ENDDO
+        ENDDO
+      ELSE
+        WRITE (message,*) "mask dimensions are not compliant with domain dimensions :",   &
+                           size(mask,1),",",size(mask,2),"/=",Pt_domain%ni,",",Pt_domain%nj
+        CALL error("domain__set_type_box")
+      ENDIF
+    ELSE
+      pt_domain%mask(:)=.TRUE.
+    ENDIF
+    
+    DO i=1,pt_domain%ni
+      DO j=1,pt_domain%nj
+        pt_domain%i_index((j-1)*pt_domain%ni+i) = i
+        pt_domain%j_index((j-1)*pt_domain%ni+i) = j
+      ENDDO
+    ENDDO
+
+  END SUBROUTINE domain__set_type_box
+
+
+  SUBROUTINE domain__set_type_orange(Pt_domain,nbp,offset,opt_index)
+  IMPLICIT NONE
+    TYPE(domain),POINTER        :: Pt_domain
+    INTEGER,INTENT(IN)          :: nbp
+    INTEGER,INTENT(IN)          :: offset
+    INTEGER,INTENT(IN),OPTIONAL :: opt_index(:)
+    
+    INTEGER  :: index(nbp)
+    INTEGER  :: i
+    
+    Pt_domain%type=orange
+    
+    IF (PRESENT(opt_index)) THEN
+      index(:)=opt_index(:)       
+    ELSE
+      DO i=1,nbp
+        index(i)=i
+      ENDDO
+    ENDIF
+
+    pt_domain%nbp=nbp
+    ALLOCATE(pt_domain%i_index(nbp))
+    ALLOCATE(pt_domain%j_index(nbp))
+    ALLOCATE(pt_domain%mask(nbp))
+        
+    DO i=1,nbp
+!      Pt_domain%i_index(i)=(index(i)+offset)/pt_domain%ni+1+pt_domain%ibegin-1
+!      Pt_domain%j_index(i)=MOD(index(i)+offset,pt_domain%ni)+1+pt_domain%jbegin-1
+      Pt_domain%i_index(i)=MOD(index(i)+offset-1,pt_domain%ni)+1
+      Pt_domain%j_index(i)=(index(i)+offset-1)/pt_domain%ni+1
+      
+    ENDDO
+
+    Pt_domain%mask(:)=.TRUE.
+
+  END SUBROUTINE domain__set_type_orange
+
+
+    
+  SUBROUTINE domain__print(pt_domain)
+  IMPLICIT NONE
+    TYPE(domain),POINTER   :: Pt_domain
+
+    PRINT *,"---- DOMAIN ----"
+    
+    IF (pt_domain%is_defined) THEN
+      PRINT *,"rank :",pt_domain%rank
+      PRINT *,"ni :",pt_domain%ni
+      PRINT *,"nj :",pt_domain%nj
+      PRINT *,"ibegin",pt_domain%ibegin
+      PRINT *,"iend",pt_domain%iend
+    ELSE
+      PRINT *,"  ---> domain undefined"
+    ENDIF
+    
+    PRINT *,"-----------------"
+  END SUBROUTINE domain__print
+  
+  SUBROUTINE domain__copy(Pt_in,pt_out)
+  IMPLICIT NONE
+    TYPE(domain),POINTER   :: Pt_in
+    TYPE(domain),POINTER   :: Pt_out
+  
+    IF (pt_in%is_defined) THEN
+      CALL domain__set(pt_out,pt_in%rank,pt_in%ni,pt_in%nj,pt_in%ibegin,pt_in%jbegin,pt_in%lon,pt_in%lat)
+    ENDIF
+  END SUBROUTINE domain__copy
+  
+END MODULE mod_domain
Index: /vendors/XMLIO_SERVER/current/src/XMLIO/mod_error_msg.f90
===================================================================
--- /vendors/XMLIO_SERVER/current/src/XMLIO/mod_error_msg.f90	(revision 1897)
+++ /vendors/XMLIO_SERVER/current/src/XMLIO/mod_error_msg.f90	(revision 1897)
@@ -0,0 +1,40 @@
+MODULE error_msg
+  USE mod_xmlio_parameters,ONLY : str_msg_len
+
+  CHARACTER(LEN=str_msg_len),SAVE :: message
+
+CONTAINS
+
+  SUBROUTINE Warning(sub_name)
+  IMPLICIT NONE
+    CHARACTER(LEN=*), INTENT(IN), OPTIONAL :: sub_name
+    
+    IF (PRESENT(sub_name)) THEN
+      PRINT *,"--* WARNING *-- : in subroutine "//sub_name
+    ELSE
+      PRINT *,"--* WARNING *-- "
+    ENDIF
+    
+    PRINT *,"----> ",TRIM(message)
+    message=REPEAT(' ',str_msg_len)
+    
+  END SUBROUTINE warning
+  
+  SUBROUTINE error(sub_name)
+  IMPLICIT NONE
+    CHARACTER(LEN=*), INTENT(IN), OPTIONAL :: sub_name
+    
+    IF (PRESENT(sub_name)) THEN
+      PRINT *,"--* WARNING *-- : in subroutine "//sub_name
+    ELSE
+      PRINT *,"--* WARNING *-- "
+    ENDIF
+
+    PRINT *,"----> ",TRIM(message)
+    message=REPEAT(' ',str_msg_len)
+    
+    STOP 
+  
+  END SUBROUTINE error    
+
+END MODULE error_msg
Index: /vendors/XMLIO_SERVER/current/src/XMLIO/mod_field.f90
===================================================================
--- /vendors/XMLIO_SERVER/current/src/XMLIO/mod_field.f90	(revision 1897)
+++ /vendors/XMLIO_SERVER/current/src/XMLIO/mod_field.f90	(revision 1897)
@@ -0,0 +1,658 @@
+MODULE mod_field
+
+  USE mod_xmlio_parameters
+  USE mod_sorted_list
+  USE mod_axis
+  USE mod_grid
+  USE mod_zoom
+   
+  IMPLICIT NONE
+
+  TYPE, PUBLIC :: field
+    CHARACTER(len=str_len)         :: id
+    LOGICAL                        :: has_id
+    CHARACTER(len=str_len)         :: name
+    LOGICAL                        :: has_name
+    CHARACTER(len=str_len)         :: description
+    LOGICAL                        :: has_description
+    CHARACTER(len=str_len)         :: unit
+    LOGICAL                        :: has_unit
+    CHARACTER(len=str_len)         :: operation
+    LOGICAL                        :: has_operation
+    INTEGER                        :: freq_op
+    LOGICAL                        :: has_freq_op
+    CHARACTER(len=str_len)         :: axis_ref
+    LOGICAL                        :: has_axis_ref
+    CHARACTER(len=str_len)         :: grid_ref
+    LOGICAL                        :: has_grid_ref
+    CHARACTER(len=str_len)         :: zoom_ref
+    LOGICAL                        :: has_zoom_ref
+    INTEGER                        :: level
+    LOGICAL                        :: has_level
+    INTEGER                        :: prec
+    LOGICAL                        :: has_prec
+    CHARACTER(len=str_len)         :: field_ref
+    LOGICAL                        :: has_field_ref
+    TYPE(field),POINTER            :: field_base
+    LOGICAL                        :: has_field_base
+    LOGICAL                        :: enabled
+    LOGICAL                        :: has_enabled
+    LOGICAL                        :: solved_field_ref
+    TYPE(axis), POINTER            :: axis
+    LOGICAL                        :: has_axis
+    TYPE(grid),POINTER             :: grid
+    LOGICAL                        :: has_grid
+    TYPE(zoom),POINTER             :: zoom
+    LOGICAL                        :: has_zoom
+    INTEGER                        :: internal(internal_field)
+    
+    
+  END TYPE field
+  
+  INTERFACE field__set_attribut
+    MODULE PROCEDURE field__set_attribut_id,field__set_attribut_pt
+  END INTERFACE
+  
+  INCLUDE 'vector_field_def.inc'
+  
+  TYPE(vector_field),POINTER,SAVE            :: field_Ids
+  TYPE(sorted_list),POINTER,SAVE,PRIVATE     :: Ids
+  
+
+CONTAINS
+  INCLUDE 'vector_field_contains.inc'
+
+  SUBROUTINE field__swap_context(saved_field_ids,saved_ids)
+  IMPLICIT NONE
+    TYPE(vector_field),POINTER :: saved_field_ids
+    TYPE(sorted_list),POINTER  :: saved_ids
+    
+    field_Ids=>saved_field_ids
+    Ids=>saved_Ids
+
+  END SUBROUTINE field__swap_context
+
+  SUBROUTINE field__init
+  IMPLICIT NONE
+    
+    CALL vector_field__new(field_Ids)
+    CALL sorted_list__new(Ids)
+   
+  END SUBROUTINE field__init
+  
+  SUBROUTINE field__get(Id,Pt_field)
+  USE string_function
+  IMPLICIT NONE
+    CHARACTER(LEN=*),INTENT(IN)     :: Id
+    TYPE(field),POINTER             :: Pt_field
+
+    INTEGER                         :: Pos
+    LOGICAL                         :: success
+    
+    CALL sorted_list__find(Ids,hash(Id),Pos,success)
+    IF (success) THEN
+      Pt_field=>field_ids%at(Pos)%Pt
+    ELSE
+      Pt_field=>NULL()
+    ENDIF
+    
+  END SUBROUTINE field__get
+    
+  
+  SUBROUTINE field__new(pt_field,Id)
+   USE string_function
+   IMPLICIT NONE
+   TYPE(field), POINTER          :: pt_field
+   CHARACTER(LEN=*),OPTIONAL     :: Id
+   
+   INTEGER              :: Pos
+
+   Pt_field%has_id=.FALSE.
+   pt_field%has_name = .FALSE.
+   pt_field%has_description = .FALSE.
+   pt_field%has_unit = .FALSE.
+   pt_field%has_operation = .FALSE.
+   pt_field%has_freq_op = .FALSE.
+   pt_field%has_axis_ref = .FALSE.
+   pt_field%has_grid_ref = .FALSE.
+   pt_field%has_zoom_ref = .FALSE.
+   pt_field%has_prec = .FALSE.
+   pt_field%has_level = .FALSE. 
+   pt_field%has_field_ref = .FALSE.
+   pt_field%has_field_base = .FALSE.
+   pt_field%has_enabled = .FALSE.
+   Pt_field%solved_field_ref=.FALSE.
+   Pt_field%has_axis=.FALSE.
+   Pt_field%has_grid=.FALSE.
+   Pt_field%has_zoom=.FALSE.
+      
+   IF (PRESENT(Id)) THEN
+     Pt_field%id=TRIM(ADJUSTL(Id))
+     Pt_field%has_id=.TRUE.
+     CALL vector_field__set_new(field_Ids,Pt_field,Pos)
+     CALL sorted_list__Add(Ids,hash(id),Pos)
+   ENDIF
+   
+ END SUBROUTINE field__new
+
+
+ SUBROUTINE field__set(p_field, name, ref, description, unit, operation, freq_op, axis_ref, grid_ref, zoom_ref, prec, level, &
+                       enabled)
+
+    TYPE(field), pointer :: p_field
+    CHARACTER(len=*), OPTIONAL :: name
+    CHARACTER(len=*), OPTIONAL :: ref
+    CHARACTER(len=*), OPTIONAL  :: description
+    CHARACTER(len=*), OPTIONAL  :: unit
+    CHARACTER(len=*), OPTIONAL :: operation
+    INTEGER, OPTIONAL  :: freq_op
+    CHARACTER(len=*),OPTIONAL :: axis_ref
+    CHARACTER(len=*),OPTIONAL :: grid_ref
+    CHARACTER(len=*),OPTIONAL :: zoom_ref
+    INTEGER, OPTIONAL :: prec
+    INTEGER, OPTIONAL :: level
+    LOGICAL, OPTIONAL :: enabled
+
+    IF (PRESENT(name)) THEN
+        p_field%name=TRIM(ADJUSTL(name))
+        p_field%has_name = .TRUE.
+    ENDIF
+    IF (PRESENT(ref)) THEN
+        p_field%field_ref=TRIM(ADJUSTL(ref))
+        p_field%has_field_ref = .TRUE.
+    ENDIF
+    IF (PRESENT(description)) THEN
+        p_field%description=TRIM(ADJUSTL(description))
+        p_field%has_description = .TRUE.
+    ENDIF
+ 
+    IF (PRESENT(unit)) then
+        p_field%unit=TRIM(ADJUSTL(unit))
+        p_field%has_unit = .TRUE.
+    ENDIF
+    IF (PRESENT(operation)) THEN
+        p_field%operation=TRIM(ADJUSTL(operation))
+        p_field%has_operation = .TRUE.
+    ENDIF
+    IF (PRESENT(freq_op)) THEN
+        p_field%freq_op=freq_op
+        p_field%has_freq_op = .TRUE.
+    ENDIF
+    IF (PRESENT(axis_ref)) THEN
+        p_field%axis_ref=TRIM(ADJUSTL(axis_ref))
+        p_field%has_axis_ref = .TRUE.
+    ENDIF
+    IF (PRESENT(grid_ref)) THEN
+        p_field%grid_ref=TRIM(ADJUSTL(grid_ref))
+        p_field%has_grid_ref = .TRUE.
+    ENDIF
+
+    IF (PRESENT(zoom_ref)) THEN
+        p_field%zoom_ref=TRIM(ADJUSTL(zoom_ref))
+        p_field%has_zoom_ref = .TRUE.
+    ENDIF
+
+    IF (PRESENT(prec)) then
+        p_field%prec=prec
+        p_field%has_prec = .TRUE.
+    ENDIF
+    
+    IF (PRESENT(level)) then
+        p_field%level=level
+        p_field%has_level = .TRUE.
+    ENDIF
+
+    IF (PRESENT(enabled)) then
+        p_field%enabled=enabled
+        p_field%has_enabled = .TRUE.
+    ENDIF
+
+  END SUBROUTINE field__set
+
+  SUBROUTINE field__set_attribut_id(id,attrib,Ok)
+  USE mod_attribut
+  USE mod_field_attribut
+  USE error_msg
+  IMPLICIT NONE
+    CHARACTER(LEN=*),INTENT(IN)   :: id
+    TYPE(attribut),INTENT(IN)     :: attrib
+    LOGICAL,OPTIONAL,INTENT(out)  :: Ok
+    
+    TYPE(field),POINTER             :: Pt_field
+    INTEGER                         :: Pos
+    LOGICAL                         :: success
+    
+    CALL sorted_list__find(Ids,hash(Id),Pos,success)
+    IF (success) THEN
+      Pt_field=>field_ids%at(Pos)%Pt
+      CALL field__set_attribut(Pt_field,attrib)
+      IF (PRESENT(OK)) ok=.TRUE.
+    ELSE
+      IF (.NOT.PRESENT(OK)) THEN
+        WRITE(message,*) 'Field id :',id,'is undefined'
+        CALL error('mod_field::field__set_attribut')
+      ELSE
+        OK=.FALSE.
+      ENDIF
+    ENDIF  
+  END SUBROUTINE field__set_attribut_id
+
+    
+  SUBROUTINE field__set_attribut_pt(pt_field,attrib)
+  USE mod_attribut
+  USE mod_field_attribut
+  USE error_msg
+  IMPLICIT NONE
+    TYPE(field),POINTER             :: Pt_field
+    TYPE(attribut),INTENT(IN) :: attrib
+
+    SELECT CASE(attrib%name)
+      CASE (field__name)
+        IF (attrib%type==string0) CALL  field__set(pt_field,name=attrib%string0_ptr) ; RETURN
+      CASE (field__field_ref)
+        IF (attrib%type==string0) CALL  field__set(pt_field,ref=attrib%string0_ptr) ; RETURN
+      CASE (field__description)
+        IF (attrib%type==string0) CALL  field__set(pt_field,description=attrib%string0_ptr) ; RETURN
+      CASE (field__unit)
+        IF (attrib%type==string0) CALL  field__set(pt_field,unit=attrib%string0_ptr) ; RETURN
+      CASE (field__operation)
+        IF (attrib%type==string0) CALL  field__set(pt_field,operation=attrib%string0_ptr) ; RETURN
+      CASE (field__freq_op)
+        IF (attrib%type==integer0) CALL  field__set(pt_field,freq_op=attrib%integer0_ptr) ; RETURN
+      CASE (field__axis_ref)
+        IF (attrib%type==string0) CALL  field__set(pt_field,axis_ref=attrib%string0_ptr) ; RETURN
+      CASE (field__grid_ref)
+        IF (attrib%type==string0) CALL  field__set(pt_field,grid_ref=attrib%string0_ptr) ; RETURN
+      CASE (field__zoom_ref)
+        IF (attrib%type==string0) CALL  field__set(pt_field,zoom_ref=attrib%string0_ptr) ; RETURN
+      CASE (field__prec)
+        IF (attrib%type==integer0) CALL  field__set(pt_field,prec=attrib%integer0_ptr) ; RETURN
+      CASE (field__level)
+        IF (attrib%type==integer0) CALL  field__set(pt_field,level=attrib%integer0_ptr) ; RETURN
+      CASE (field__enabled)
+        IF (attrib%type==logical0) CALL  field__set(pt_field,enabled=attrib%logical0_ptr) ; RETURN
+     END SELECT
+
+     WRITE(message,*) 'field attribut ',attrib%name,' : type :',attrib%type,   &
+                      ' : Attribute type is incompatible with the provided value'
+     CALL error('mod_field::field__set_attribut')
+    
+  END SUBROUTINE field__set_attribut_pt    
+
+  SUBROUTINE field__print(pt_field)
+
+    TYPE(field), POINTER :: pt_field
+    
+    PRINT *,"--- FIELD ---"
+
+    IF (pt_field%has_id) THEN
+        PRINT *, 'id : ',TRIM(pt_field%id)
+    ELSE
+        PRINT *, 'id undefined '
+    ENDIF
+
+    IF (pt_field%has_name) THEN
+        PRINT *, 'name : ',TRIM(pt_field%name)
+    ELSE
+        PRINT *, 'name undefined '
+    ENDIF
+    IF (pt_field%has_description) THEN
+        PRINT *, 'description : ',TRIM(pt_field%description)
+    ELSE
+        PRINT *, 'description undefined '
+    ENDIF
+    IF (pt_field%has_unit) THEN
+        PRINT *, 'unit : ',TRIM(pt_field%unit)
+    ELSE
+        PRINT *, 'unit undefined '
+    ENDIF
+    IF (pt_field%has_operation) THEN
+        PRINT *, 'operation ',TRIM(pt_field%operation)
+    ELSE
+        PRINT *, 'operation undefined '
+    ENDIF
+    IF (pt_field%has_freq_op) THEN
+        PRINT *, 'freq_op ',pt_field%freq_op
+    ELSE
+        PRINT *, 'freq_op undefined '
+    ENDIF
+
+    IF (pt_field%has_axis_ref) THEN
+        PRINT *, 'axis_ref : ',TRIM(pt_field%axis_ref)
+    ELSE
+        PRINT *, 'axis_ref undefined '
+    ENDIF
+
+    IF (pt_field%has_grid_ref) THEN
+        PRINT *, 'grid_ref : ',TRIM(pt_field%grid_ref)
+    ELSE
+        PRINT *, 'grid_ref undefined '
+    ENDIF
+
+    IF (pt_field%has_zoom_ref) THEN
+        PRINT *, 'zoom_ref : ',TRIM(pt_field%zoom_ref)
+    ELSE
+        PRINT *, 'zoom_ref undefined '
+    ENDIF
+    
+    IF (pt_field%has_field_ref) THEN
+        PRINT *, 'field_ref : ',TRIM(pt_field%field_ref)
+    ELSE
+        PRINT *, 'field_ref undefined '
+    ENDIF
+
+!    call vert_axis__print(pt_field%p_vert_axis)
+!
+!    IF (pt_field%is_vert_axis_ref_def) THEN
+!        PRINT *, 'pt_field%vert_axis_ref ',TRIM(pt_field%vert_axis_ref)
+!    ELSE
+!        PRINT *, 'pt_field%vert_axis_ref undefined '
+!    ENDIF
+    IF (pt_field%has_prec) THEN
+        PRINT *, 'prec ',pt_field%prec
+    ELSE
+        PRINT *, 'prec undefined '
+    ENDIF
+    IF (pt_field%has_level) then
+        PRINT *, 'level ',pt_field%level
+    ELSE
+        PRINT *, 'level undefined '
+    ENDIF
+    IF (pt_field%has_field_base) THEN
+        PRINT *, 'field_base :',TRIM(Pt_field%field_base%id)
+    ELSE
+        PRINT *, 'field_base indefini'
+    ENDIF
+
+    IF (pt_field%has_enabled) THEN
+        PRINT *, 'enabled : ',pt_field%enabled
+    ELSE
+        PRINT *, 'enabled indefini'
+    ENDIF
+ 
+    PRINT *,"------------"
+    
+  END SUBROUTINE field__print
+
+!  SUBROUTINE field__resolve_ref_vert_axis(p_field)
+!
+!    TYPE(field), POINTER :: p_field
+!    CHARACTER(len=str_len) :: name
+!
+!    IF (p_field%is_vert_axis_ref_def) THEN
+!        name=p_field%vert_axis_ref
+!        IF (vert_axis_def__is_exist(name)) THEN
+!            CALL vert_axis_def__get(name,p_field%p_vert_axis)
+!            p_field%is_vert_axis_def = .TRUE.
+!        ENDIF
+!    ENDIF
+!
+!  END SUBROUTINE field__resolve_ref_vert_axis
+
+  SUBROUTINE field__apply_default(pt_field_default, pt_field_in, pt_field_out)
+
+    TYPE(field), POINTER :: pt_field_default, pt_field_in, pt_field_out
+
+    IF (pt_field_in%has_name) THEN
+        pt_field_out%name=pt_field_in%name
+        pt_field_out%has_name=.TRUE.
+    ELSE IF ( pt_field_default%has_name) THEN
+        pt_field_out%name=pt_field_default%name
+        pt_field_out%has_name=.TRUE.
+    ELSE
+        pt_field_out%has_name=.FALSE.
+    ENDIF
+        
+    IF (pt_field_in%has_description) THEN
+        pt_field_out%description=pt_field_in%description
+        pt_field_out%has_description=.TRUE.
+    ELSE IF ( pt_field_default%has_description ) THEN
+        pt_field_out%description=pt_field_default%description
+        pt_field_out%has_description=.TRUE.
+    ELSE
+        pt_field_out%has_description=.FALSE.
+    ENDIF
+
+    IF (pt_field_in%has_unit) THEN
+        pt_field_out%unit=pt_field_in%unit
+        pt_field_out%has_unit=.TRUE.
+    ELSE IF ( pt_field_default%has_unit ) THEN
+        pt_field_out%unit=pt_field_default%unit
+        pt_field_out%has_unit=.TRUE.
+    ELSE
+        pt_field_out%has_unit=.FALSE.
+    ENDIF
+
+    IF (pt_field_in%has_operation) THEN
+        pt_field_out%operation=pt_field_in%operation
+        pt_field_out%has_operation=.TRUE.
+    ELSE IF ( pt_field_default%has_operation ) THEN
+        pt_field_out%operation=pt_field_default%operation
+        pt_field_out%has_operation=.TRUE.
+    ELSE
+        pt_field_out%has_operation=.FALSE.
+    ENDIF
+
+    IF (pt_field_in%has_freq_op) THEN
+        pt_field_out%freq_op=pt_field_in%freq_op
+        pt_field_out%has_freq_op=.TRUE.
+    ELSE IF ( pt_field_default%has_freq_op ) THEN
+        pt_field_out%freq_op=pt_field_default%freq_op
+        pt_field_out%has_freq_op=.TRUE.
+    ELSE
+        pt_field_out%has_freq_op=.FALSE.
+    ENDIF
+
+!    IF (pt_field_in%has_axis) THEN
+!        pt_field_out%p_axis => pt_field_in%p_axis
+!        pt_field_out%has_axis=.TRUE.
+!    ELSE IF ( pt_field_default%has_axis ) THEN
+!        pt_field_out%p_axis => pt_field_default%p_axis
+!        pt_field_out%has_axis=.TRUE.
+!    ELSE
+!        pt_field_out%has_axis=.FALSE.
+!    ENDIF
+    
+    IF (pt_field_in%has_axis_ref) THEN
+        pt_field_out%axis_ref=pt_field_in%axis_ref
+        pt_field_out%has_axis_ref=.TRUE.
+    ELSE IF ( pt_field_default%has_axis_ref ) THEN
+        pt_field_out%axis_ref=pt_field_default%axis_ref
+        pt_field_out%has_axis_ref=.TRUE.
+    ELSE
+        pt_field_out%has_axis_ref=.FALSE.
+    ENDIF
+
+    IF (pt_field_in%has_grid_ref) THEN
+        pt_field_out%grid_ref=pt_field_in%grid_ref
+        pt_field_out%has_grid_ref=.TRUE.
+    ELSE IF ( pt_field_default%has_grid_ref ) THEN
+        pt_field_out%grid_ref=pt_field_default%grid_ref
+        pt_field_out%has_grid_ref=.TRUE.
+    ELSE
+        pt_field_out%has_grid_ref=.FALSE.
+    ENDIF
+
+    IF (pt_field_in%has_zoom_ref) THEN
+        pt_field_out%zoom_ref=pt_field_in%zoom_ref
+        pt_field_out%has_zoom_ref=.TRUE.
+    ELSE IF ( pt_field_default%has_zoom_ref ) THEN
+        pt_field_out%zoom_ref=pt_field_default%zoom_ref
+        pt_field_out%has_zoom_ref=.TRUE.
+    ELSE
+        pt_field_out%has_zoom_ref=.FALSE.
+    ENDIF
+
+    IF (pt_field_in%has_prec) THEN
+        pt_field_out%prec=pt_field_in%prec
+        pt_field_out%has_prec=.TRUE.
+    ELSE IF ( pt_field_default%has_prec ) THEN
+        pt_field_out%prec=pt_field_default%prec
+        pt_field_out%has_prec=.TRUE.
+    ELSE
+        pt_field_out%has_prec=.FALSE.
+    ENDIF
+
+    IF (pt_field_in%has_level) THEN
+        pt_field_out%level=pt_field_in%level
+        pt_field_out%has_level=.TRUE.
+    ELSE IF ( pt_field_default%has_level ) THEN
+        pt_field_out%level=pt_field_default%level
+        pt_field_out%has_level=.TRUE.
+    ELSE
+        pt_field_out%has_level=.FALSE.
+    ENDIF
+
+    IF (pt_field_in%has_enabled) THEN
+        pt_field_out%enabled=pt_field_in%enabled
+        pt_field_out%has_enabled=.TRUE.
+    ELSE IF ( pt_field_default%has_enabled ) THEN
+        pt_field_out%enabled=pt_field_default%enabled
+        pt_field_out%has_enabled=.TRUE.
+    ELSE
+        pt_field_out%has_enabled=.FALSE.
+    ENDIF
+    
+  END SUBROUTINE field__apply_default
+
+!  FUNCTION field__is_vert_axis_attached(p_field, vert_axis_name)
+!
+!    LOGICAL :: field__is_vert_axis_attached
+!    TYPE(field), POINTER :: p_field
+!    CHARACTER(len=*), INTENT(IN) :: vert_axis_name
+!
+!    field__is_vert_axis_attached = .false.
+!    IF (p_field%is_vert_axis_def) THEN
+!        IF (vert_axis_name == p_field%p_vert_axis%name) field__is_vert_axis_attached = .TRUE.
+!    ENDIF
+!
+!  END FUNCTION field__is_vert_axis_attached
+
+  RECURSIVE SUBROUTINE field__solve_field_ref(pt_field)
+  USE error_msg
+  IMPLICIT NONE
+    TYPE(field), POINTER :: pt_field
+    
+    TYPE(field), POINTER :: field_ref
+    
+    IF (.NOT. pt_field%solved_field_ref) THEN
+      
+      IF (pt_field%has_field_ref) THEN
+      
+        CALL field__get(pt_field%field_ref,field_ref)
+      
+        IF (.NOT. ASSOCIATED(field_ref)) THEN
+          WRITE (message,*) "The field : id = ",pt_field%id,"  name = ",Pt_field%name,   &
+                        " has a unknown reference to field : id =",pt_field%field_ref
+          CALL error("field__solve_field_ref")
+        ENDIF
+      
+        CALL field__get_field_base(field_ref,pt_field%field_base) 
+        Pt_field%has_field_base=.TRUE.
+        
+        CALL field__apply_default(field_ref,pt_field,pt_field)
+        
+          
+      ELSE 
+
+        IF (pt_field%has_id) THEN
+          pt_field%field_base=>pt_field
+        ENDIF
+      
+      ENDIF
+      
+      IF (.NOT. pt_field%has_name) THEN
+        IF (pt_field%has_id) THEN
+          pt_field%name=pt_field%id
+          pt_field%has_name=.TRUE.
+        ENDIF
+      ENDIF
+    
+      Pt_field%solved_field_ref=.TRUE.
+    
+    ENDIF
+    
+  END SUBROUTINE field__solve_field_ref
+  
+
+  RECURSIVE SUBROUTINE field__get_field_base(pt_field,pt_field_base)
+  IMPLICIT NONE
+    TYPE(field), POINTER :: pt_field
+    TYPE(field), POINTER :: pt_field_base
+    
+     
+    IF (.NOT. Pt_field%solved_field_ref) THEN
+      CALL field__solve_field_ref(Pt_field)
+    ENDIF
+     
+    IF (pt_field%has_field_base) THEN
+      pt_field_base=>pt_field%field_base
+    ELSE
+      pt_field_base=>pt_field
+    ENDIF
+   
+ END SUBROUTINE field__get_field_base
+
+ SUBROUTINE field__solve_axis_ref(pt_field)
+ USE error_msg
+ IMPLICIT NONE
+   TYPE(field), POINTER :: pt_field
+   
+   IF (pt_field%has_axis_ref) THEN
+     CALL axis__get(pt_field%axis_ref,pt_field%axis)
+     IF (ASSOCIATED(pt_field%axis)) THEN
+       pt_field%has_axis=.TRUE.
+     ELSE
+       WRITE (message,*) "The field : id = ",pt_field%id,"  name = ",Pt_field%name,   &
+                        " has a unknown reference to axis : id =",pt_field%axis_ref
+       CALL error("mod_field::field__solve_axis_ref")
+     ENDIF
+   ENDIF
+   
+ END SUBROUTINE field__solve_axis_ref
+   
+ SUBROUTINE field__solve_grid_ref(pt_field)
+ USE error_msg
+ IMPLICIT NONE
+   TYPE(field), POINTER :: pt_field
+   
+   IF (pt_field%has_grid_ref) THEN
+     CALL grid__get(pt_field%grid_ref,pt_field%grid)
+     IF (ASSOCIATED(pt_field%grid)) THEN
+       pt_field%has_grid=.TRUE.
+     ELSE
+       WRITE (message,*) "The field : id = ",pt_field%id,"  name = ",Pt_field%name,   &
+                        " has a unknown reference to grid : id =",pt_field%grid_ref
+       CALL error("mod_field::field__solve_grid_ref")
+     ENDIF
+   ENDIF
+   
+ END SUBROUTINE field__solve_grid_ref
+   
+ SUBROUTINE field__solve_zoom_ref(pt_field)
+ USE error_msg
+ IMPLICIT NONE
+   TYPE(field), POINTER :: pt_field
+   
+   IF (.NOT. pt_field%has_zoom_ref) THEN
+     IF (pt_field%has_grid_ref) THEN
+       pt_field%has_zoom_ref=.TRUE.
+       pt_field%zoom_ref=pt_field%grid_ref
+     ENDIF
+   ENDIF
+    
+   IF (pt_field%has_zoom_ref) THEN
+     CALL zoom__get(pt_field%zoom_ref,pt_field%zoom)
+     IF (ASSOCIATED(pt_field%zoom)) THEN
+       pt_field%has_zoom=.TRUE.
+     ELSE
+       WRITE (message,*) "The field : id = ",pt_field%id,"  name = ",Pt_field%name,   &
+                        " has a unknown reference to zoom : id =",pt_field%zoom_ref
+       CALL error("mod_field::field__solve_zoom_ref")
+     ENDIF
+   ENDIF
+   
+ END SUBROUTINE field__solve_zoom_ref
+
+   
+END MODULE mod_field
Index: /vendors/XMLIO_SERVER/current/src/XMLIO/mod_field_attribute.f90
===================================================================
--- /vendors/XMLIO_SERVER/current/src/XMLIO/mod_field_attribute.f90	(revision 1897)
+++ /vendors/XMLIO_SERVER/current/src/XMLIO/mod_field_attribute.f90	(revision 1897)
@@ -0,0 +1,21 @@
+MODULE mod_field_attribut
+  USE mod_object
+
+  INTEGER,PARAMETER :: field__begin = field_object + 10
+  
+  INTEGER,PARAMETER :: field__name = field_object + 11
+  INTEGER,PARAMETER :: field__description = field_object + 12
+  INTEGER,PARAMETER :: field__unit = field_object + 13
+  INTEGER,PARAMETER :: field__operation = field_object + 14
+  INTEGER,PARAMETER :: field__freq_op = field_object + 15
+  INTEGER,PARAMETER :: field__axis_ref = field_object + 16
+  INTEGER,PARAMETER :: field__grid_ref = field_object + 17
+  INTEGER,PARAMETER :: field__zoom_ref = field_object + 18
+  INTEGER,PARAMETER :: field__level = field_object + 19
+  INTEGER,PARAMETER :: field__prec = field_object + 20
+  INTEGER,PARAMETER :: field__field_ref = field_object + 21
+  INTEGER,PARAMETER :: field__enabled = field_object + 22
+
+  INTEGER,PARAMETER :: field__end = field_object + 23
+  
+END MODULE mod_field_attribut
Index: /vendors/XMLIO_SERVER/current/src/XMLIO/mod_field_definition.f90
===================================================================
--- /vendors/XMLIO_SERVER/current/src/XMLIO/mod_field_definition.f90	(revision 1897)
+++ /vendors/XMLIO_SERVER/current/src/XMLIO/mod_field_definition.f90	(revision 1897)
@@ -0,0 +1,26 @@
+MODULE mod_field_definition
+  USE mod_field_group
+  
+  TYPE(field_group),SAVE,POINTER :: field_definition
+ 
+CONTAINS
+
+  SUBROUTINE field_definition__swap_context(saved_field_definition)
+  IMPLICIT NONE
+    TYPE(field_group),POINTER :: saved_field_definition
+  
+    field_definition=>saved_field_definition
+
+  END SUBROUTINE field_definition__swap_context
+
+
+  SUBROUTINE field_definition__Init
+  IMPLICIT NONE
+  
+   CALL field_group__new(field_definition,"field_definition")
+
+  END SUBROUTINE field_definition__Init
+  
+        
+END MODULE mod_field_definition
+
Index: /vendors/XMLIO_SERVER/current/src/XMLIO/mod_field_group.f90
===================================================================
--- /vendors/XMLIO_SERVER/current/src/XMLIO/mod_field_group.f90	(revision 1897)
+++ /vendors/XMLIO_SERVER/current/src/XMLIO/mod_field_group.f90	(revision 1897)
@@ -0,0 +1,304 @@
+MODULE mod_field_group
+
+  USE mod_field
+  USE mod_xmlio_parameters
+
+  IMPLICIT NONE
+
+  TYPE field_group
+    CHARACTER(LEN=str_len)                    :: id
+    LOGICAL                                   :: has_id
+    TYPE(vector_field_group), POINTER         :: groups
+    TYPE(vector_field),POINTER                :: fields     
+    TYPE(field), POINTER                      :: default_attribut
+  END TYPE field_group
+
+  INCLUDE "vector_field_group_def.inc"  
+
+  TYPE(vector_field_group),SAVE,POINTER      :: field_group_Ids
+  TYPE(sorted_list),POINTER,SAVE,PRIVATE     :: Ids 
+
+  INTERFACE field_group__set_attribut
+    MODULE PROCEDURE field_group__set_attribut_id,field_group__set_attribut_pt
+  END INTERFACE
+
+CONTAINS
+
+  INCLUDE "vector_field_group_contains.inc"
+
+
+  SUBROUTINE field_group__swap_context(saved_field_group_ids, saved_ids)
+  IMPLICIT NONE
+    TYPE(vector_field_group),POINTER   :: saved_field_group_Ids
+    TYPE(sorted_list),POINTER          :: saved_Ids
+    
+    field_group_ids=>saved_field_group_ids 
+    ids=>saved_ids
+    
+  END SUBROUTINE field_group__swap_context
+
+  SUBROUTINE field_group__init
+  IMPLICIT NONE
+    
+    CALL vector_field_group__new(field_group_Ids)
+    CALL sorted_list__new(Ids)
+   
+  END SUBROUTINE field_group__init
+
+  SUBROUTINE field_group__get(Id,Pt_fg)
+  USE string_function
+  IMPLICIT NONE
+    CHARACTER(LEN=*),INTENT(IN)     :: Id
+    TYPE(field_group),POINTER       :: Pt_fg
+
+    INTEGER                         :: Pos
+    LOGICAL                         :: success
+    
+    CALL sorted_list__find(Ids,hash(Id),Pos,success)
+    IF (success) THEN
+      Pt_fg=>field_group_ids%at(Pos)%Pt
+    ELSE
+      Pt_fg=>NULL()
+    ENDIF
+    
+  END SUBROUTINE field_group__get
+
+  SUBROUTINE field_group__set_attribut_id(id,attrib,Ok)
+  USE mod_attribut
+  USE error_msg
+  IMPLICIT NONE
+    CHARACTER(LEN=*),INTENT(IN) :: id
+    TYPE(attribut),INTENT(IN) :: attrib
+    LOGICAL,OPTIONAL,INTENT(out)  :: Ok
+    
+    TYPE(field_group),POINTER             :: Pt_fg
+    INTEGER                         :: Pos
+    LOGICAL                         :: success
+    
+    CALL sorted_list__find(Ids,hash(Id),Pos,success)
+    IF (success) THEN
+      Pt_fg=>field_group_ids%at(Pos)%Pt
+      CALL field_group__set_attribut(Pt_fg,attrib)
+      IF (PRESENT(OK)) ok=.TRUE.
+    ELSE
+      IF (.NOT.PRESENT(OK)) THEN
+        WRITE(message,*) 'Field group id :',id,'is undefined'
+        CALL error('mod_field_group::field_group__set_attribut')
+      ELSE
+        OK=.FALSE.
+      ENDIF
+    ENDIF 
+    
+  END SUBROUTINE field_group__set_attribut_id
+  
+  SUBROUTINE field_group__set_attribut_pt(pt_fg,attrib)
+  USE mod_attribut
+  USE mod_object
+  IMPLICIT NONE
+    TYPE(field_group),POINTER :: Pt_fg
+    TYPE(attribut),INTENT(IN) :: attrib
+     
+    IF (attrib%object==field_object) THEN
+      CALL field__set_attribut(Pt_fg%default_attribut,attrib)
+    ENDIF
+    
+  END SUBROUTINE field_group__set_attribut_pt
+    
+      
+  RECURSIVE SUBROUTINE field_group__new(Pt_fg,Id)
+  USE string_function
+  IMPLICIT NONE
+    TYPE(field_group),POINTER                :: Pt_fg
+    CHARACTER(LEN=*),OPTIONAL,INTENT(IN)     :: Id
+    
+    INTEGER :: Pos
+    
+    ALLOCATE(Pt_fg%groups)
+    ALLOCATE(Pt_fg%fields)
+    ALLOCATE(Pt_fg%default_attribut)
+    
+    CALL vector_field_group__new(Pt_fg%groups)
+    CALL vector_field__new(Pt_fg%fields)
+    CALL field__new(Pt_fg%default_attribut)
+    Pt_fg%has_id=.FALSE.
+      
+    IF (PRESENT(Id)) THEN
+      Pt_fg%id=TRIM(Id)
+      Pt_fg%has_id=.TRUE.
+      CALL vector_field_group__set_new(field_group_Ids,Pt_fg,Pos)
+      CALL sorted_list__Add(Ids,hash(id),Pos)
+    ENDIF
+
+  END SUBROUTINE field_group__new
+
+      
+  SUBROUTINE field_group__get_new_group(Pt_fg,Pt_fg_out,Id)
+  IMPLICIT NONE
+    TYPE(field_group),POINTER            :: Pt_fg
+    TYPE(field_group),POINTER            :: Pt_fg_out
+    CHARACTER(LEN=*),OPTIONAL      :: Id
+    
+    CALL vector_field_group__get_new(Pt_fg%groups,Pt_fg_out)
+ 
+    IF (PRESENT(id)) THEN
+      CALL field_group__new(Pt_fg_out,Id)
+    ELSE
+      CALL field_group__new(Pt_fg_out)
+    ENDIF
+    
+  END SUBROUTINE field_group__get_new_group
+
+  
+  SUBROUTINE field_group__get_new_field(Pt_fg,Pt_f_out,Id)
+  IMPLICIT NONE
+    TYPE(field_group),POINTER            :: Pt_fg
+    TYPE(field),POINTER                  :: Pt_f_out
+    CHARACTER(LEN=*),OPTIONAL      :: Id
+    
+    CALL vector_field__get_new(Pt_fg%fields,Pt_f_out)
+    
+    IF (PRESENT(id)) THEN
+      CALL field__new(Pt_f_out,Id)
+    ELSE
+      CALL field__new(Pt_f_out)
+    ENDIF
+    
+  END SUBROUTINE field_group__get_new_field
+  
+  
+  SUBROUTINE field_group__get_default_attrib(Pt_fg,Pt_f)
+  IMPLICIT NONE
+    TYPE(field_group),POINTER  :: Pt_fg
+    TYPE(field),POINTER        :: Pt_f
+    
+    Pt_f=>Pt_fg%default_attribut
+  END SUBROUTINE field_group__get_default_attrib
+
+  
+  RECURSIVE SUBROUTINE field_group__apply_default(Pt_fg,default)
+  IMPLICIT NONE
+    TYPE(field_group),POINTER           :: Pt_fg
+    TYPE(field),POINTER,OPTIONAL        :: default
+    
+    INTEGER :: i
+    
+    IF (PRESENT(default)) THEN
+      CALL field__apply_default(default,Pt_fg%default_attribut,Pt_fg%default_attribut)
+    ENDIF
+      
+    DO i=1,Pt_fg%groups%size
+      CALL field_group__apply_default(Pt_fg%groups%at(i)%pt,Pt_fg%default_attribut)
+    ENDDO
+    
+    DO i=1,Pt_fg%fields%size
+      CALL field__apply_default(Pt_fg%default_attribut,Pt_fg%fields%at(i)%pt,Pt_fg%fields%at(i)%pt)
+    ENDDO
+  
+  END SUBROUTINE field_group__apply_default
+  
+  SUBROUTINE field_group__solve_ref(pt_fg)
+  IMPLICIT NONE
+    TYPE(field_group),POINTER  :: Pt_fg
+
+    CALL field_group__solve_field_ref(Pt_fg)
+    CALL field_group__solve_axis_ref(Pt_fg)
+    CALL field_group__solve_grid_ref(Pt_fg)
+    CALL field_group__solve_zoom_ref(Pt_fg)
+
+  END SUBROUTINE  field_group__solve_ref
+     
+  RECURSIVE SUBROUTINE field_group__solve_field_ref(Pt_fg)
+  IMPLICIT NONE
+    TYPE(field_group),POINTER  :: Pt_fg
+    
+    INTEGER :: i
+
+    DO i=1,Pt_fg%groups%size
+      CALL field_group__solve_field_ref(Pt_fg%groups%at(i)%pt)
+    ENDDO
+    
+    DO i=1,Pt_fg%fields%size
+      CALL field__solve_field_ref(Pt_fg%fields%at(i)%pt)
+    ENDDO
+  
+  END SUBROUTINE field_group__solve_field_ref
+
+  RECURSIVE SUBROUTINE field_group__solve_axis_ref(Pt_fg)
+  IMPLICIT NONE
+    TYPE(field_group),POINTER  :: Pt_fg
+    
+    INTEGER :: i
+
+    DO i=1,Pt_fg%groups%size
+      CALL field_group__solve_axis_ref(Pt_fg%groups%at(i)%pt)
+    ENDDO
+    
+    DO i=1,Pt_fg%fields%size
+      CALL field__solve_axis_ref(Pt_fg%fields%at(i)%pt)
+    ENDDO
+  
+  END SUBROUTINE field_group__solve_axis_ref
+
+  RECURSIVE SUBROUTINE field_group__solve_grid_ref(Pt_fg)
+  IMPLICIT NONE
+    TYPE(field_group),POINTER  :: Pt_fg
+     
+    INTEGER :: i
+ 
+    DO i=1,Pt_fg%groups%size
+      CALL field_group__solve_grid_ref(Pt_fg%groups%at(i)%pt)
+    ENDDO
+       
+    DO i=1,Pt_fg%fields%size
+      CALL field__solve_grid_ref(Pt_fg%fields%at(i)%pt)
+    ENDDO
+  
+  END SUBROUTINE field_group__solve_grid_ref
+
+  RECURSIVE SUBROUTINE field_group__solve_zoom_ref(Pt_fg)
+  IMPLICIT NONE
+    TYPE(field_group),POINTER  :: Pt_fg
+     
+    INTEGER :: i
+ 
+    DO i=1,Pt_fg%groups%size
+      CALL field_group__solve_zoom_ref(Pt_fg%groups%at(i)%pt)
+    ENDDO
+       
+    DO i=1,Pt_fg%fields%size
+      CALL field__solve_zoom_ref(Pt_fg%fields%at(i)%pt)
+    ENDDO
+  
+  END SUBROUTINE field_group__solve_zoom_ref
+  
+  RECURSIVE SUBROUTINE field_group__print(Pt_fg)
+  IMPLICIT NONE
+    TYPE(field_group),POINTER  :: Pt_fg
+   
+    INTEGER :: i
+    
+    PRINT *,"--- FIELD GROUP ---"
+    IF (Pt_fg%has_id) THEN
+      PRINT *,"id :",TRIM(Pt_fg%id)
+    ELSE
+      PRINT *,"id undefined"
+    ENDIF
+    
+    PRINT *,"field default attribut :"
+    CALL field__print(Pt_fg%default_attribut)    
+
+    PRINT *,"owned field groups :",Pt_fg%groups%size      
+    DO i=1,Pt_fg%groups%size
+      CALL field_group__print(Pt_fg%groups%at(i)%pt)
+    ENDDO
+
+    PRINT *,"owned field :",Pt_fg%fields%size      
+    DO i=1,Pt_fg%fields%size
+      CALL field__print(Pt_fg%fields%at(i)%pt)
+    ENDDO
+    
+    PRINT *,"------------"
+    
+  END SUBROUTINE field_group__print     
+
+END MODULE mod_field_group
Index: /vendors/XMLIO_SERVER/current/src/XMLIO/mod_file.f90
===================================================================
--- /vendors/XMLIO_SERVER/current/src/XMLIO/mod_file.f90	(revision 1897)
+++ /vendors/XMLIO_SERVER/current/src/XMLIO/mod_file.f90	(revision 1897)
@@ -0,0 +1,362 @@
+MODULE mod_file
+
+  USE mod_xmlio_parameters
+  USE mod_field_group
+  USE mod_sorted_list
+
+  TYPE, PUBLIC :: file
+    CHARACTER(len=str_len)           :: id
+    LOGICAL                          :: has_id
+    CHARACTER(len=str_len)           :: name
+    LOGICAL                          :: has_name
+    CHARACTER(len=str_len)           :: name_suffix
+    LOGICAL                          :: has_name_suffix
+    CHARACTER(len=str_len)           :: description
+    LOGICAL                          :: has_description
+    INTEGER                          :: output_freq
+    LOGICAL                          :: has_output_freq
+    INTEGER                          :: output_level
+    LOGICAL                          :: has_output_level
+    LOGICAL                          :: enabled
+    LOGICAL                          :: has_enabled
+    INTEGER                          :: internal(internal_file)
+    TYPE(field_group),POINTER        :: field_list 
+  END TYPE file
+
+  INCLUDE 'vector_file_def.inc'
+  
+  TYPE(vector_file),POINTER,SAVE             :: file_Ids
+  TYPE(sorted_list),POINTER,SAVE,PRIVATE     :: Ids 
+
+  INTERFACE file__set_attribut
+    MODULE PROCEDURE file__set_attribut_id,file__set_attribut_pt
+  END INTERFACE
+
+CONTAINS
+  INCLUDE 'vector_file_contains.inc'
+
+  SUBROUTINE file__swap_context(saved_file_ids,saved_ids)
+  IMPLICIT NONE
+    TYPE(vector_file),POINTER      :: saved_file_Ids
+    TYPE(sorted_list),POINTER      :: saved_Ids
+    
+    file_ids=>saved_file_ids
+    ids=>saved_ids 
+ 
+  END SUBROUTINE file__swap_context
+
+
+  SUBROUTINE file__init
+  IMPLICIT NONE
+    
+    CALL vector_file__new(file_Ids)
+    CALL sorted_list__new(Ids)
+   
+  END SUBROUTINE file__init
+  
+  SUBROUTINE file__get(Id,Pt_file)
+  USE string_function
+  IMPLICIT NONE
+    CHARACTER(LEN=*),INTENT(IN)     :: Id
+    TYPE(file),POINTER              :: Pt_file
+
+    INTEGER                         :: Pos
+    LOGICAL                         :: success
+    
+    CALL sorted_list__find(Ids,hash(Id),Pos,success)
+    IF (success) THEN
+      Pt_file=>file_ids%at(Pos)%Pt
+    ELSE
+      Pt_file=>NULL()
+    ENDIF
+    
+  END SUBROUTINE file__get
+  
+  SUBROUTINE file__new(pt_file,Id)
+  USE string_function
+  IMPLICIT NONE
+   TYPE(file), POINTER           :: pt_file
+   CHARACTER(LEN=*),OPTIONAL     :: Id
+   INTEGER                       :: Pos
+
+   ALLOCATE(pt_file%field_list)
+   CALL field_group__new(pt_file%field_list)
+      
+   pt_file%has_id           = .FALSE.
+   pt_file%has_name         = .FALSE.
+   pt_file%has_name_suffix  = .FALSE.
+   pt_file%has_description  = .FALSE.
+   pt_file%has_output_freq  = .FALSE.
+   pt_file%has_output_level = .FALSE.
+   pt_file%has_output_level = .FALSE.
+   
+   IF (PRESENT(Id)) THEN
+     Pt_file%id=TRIM(ADJUSTL(Id))
+     Pt_file%has_id=.TRUE.
+     CALL vector_file__set_new(file_Ids,Pt_file,Pos)
+     CALL sorted_list__Add(Ids,hash(id),Pos)
+   ENDIF
+
+  END SUBROUTINE file__new
+
+  SUBROUTINE file__set(pt_file, name, name_suffix, description, output_freq, output_level,enabled)
+  IMPLICIT NONE
+    TYPE(file), POINTER         :: pt_file
+    CHARACTER(len=*)  ,OPTIONAL :: name
+    CHARACTER(len=*)  ,OPTIONAL :: name_suffix
+    CHARACTER(len=*)  ,OPTIONAL :: description
+    INTEGER           ,OPTIONAL :: output_freq
+    INTEGER           ,OPTIONAL :: output_level
+    LOGICAL           ,OPTIONAL :: enabled
+
+    IF (PRESENT(name)) THEN
+        pt_file%name=TRIM(ADJUSTL(name))
+        pt_file%has_name = .TRUE.
+    ENDIF
+
+    IF (PRESENT(name_suffix)) THEN
+        pt_file%name_suffix=TRIM(ADJUSTL(name_suffix))
+        pt_file%has_name_suffix = .TRUE.
+    ENDIF
+
+    IF (PRESENT(description)) THEN
+        pt_file%description=TRIM(ADJUSTL(description))
+        pt_file%has_description = .TRUE.
+    ENDIF
+ 
+    IF (PRESENT(output_freq)) then
+        pt_file%output_freq=output_freq
+        pt_file%has_output_freq = .TRUE.
+    ENDIF
+
+    IF (PRESENT(output_level)) then
+        pt_file%output_level = output_level
+        pt_file%has_output_level = .TRUE.
+    ENDIF
+
+    IF (PRESENT(enabled)) then
+        pt_file%enabled = enabled
+        pt_file%has_enabled = .TRUE.
+    ENDIF
+    
+  END SUBROUTINE file__set
+
+  SUBROUTINE file__set_attribut_id(id,attrib,ok)
+  USE mod_attribut
+  USE error_msg
+  IMPLICIT NONE
+    CHARACTER(LEN=*),INTENT(IN)   :: id
+    TYPE(attribut),INTENT(IN)     :: attrib
+    LOGICAL,OPTIONAL,INTENT(OUT)  :: ok
+    
+    TYPE(file),POINTER              :: Pt_file
+    INTEGER                         :: Pos
+    LOGICAL                         :: success
+    
+    CALL sorted_list__find(Ids,hash(Id),Pos,success)
+    IF (success) THEN
+      Pt_file=>file_ids%at(Pos)%Pt
+      CALL file__set_attribut_pt(Pt_file,attrib)
+      IF (PRESENT(OK)) OK=.TRUE.
+    ELSE
+      IF (.NOT.PRESENT(OK)) THEN
+        WRITE(message,*) 'File id : ',id,' is undefined'
+        CALL error('mod_file::file__set_attribut')
+      ELSE
+        OK=.FALSE.
+      ENDIF
+    ENDIF  
+  
+  END SUBROUTINE file__set_attribut_id
+      
+  SUBROUTINE file__set_attribut_pt(Pt_file,attrib)
+  USE mod_attribut
+  USE mod_file_attribut
+  USE error_msg
+  IMPLICIT NONE
+    TYPE(file),POINTER        :: Pt_file
+    TYPE(attribut),INTENT(IN) :: attrib
+
+    
+    SELECT CASE(attrib%name)
+      CASE (file__name)
+        IF (attrib%type==string0) CALL  file__set(pt_file,name=attrib%string0_ptr(1:attrib%string_len)) ; RETURN
+      CASE (file__name_suffix)
+        IF (attrib%type==string0) CALL  file__set(pt_file,name_suffix=attrib%string0_ptr(1:attrib%string_len)) ; RETURN
+      CASE (file__description)
+        IF (attrib%type==string0) CALL  file__set(pt_file,description=attrib%string0_ptr(1:attrib%string_len)) ; RETURN
+      CASE (file__output_freq)
+        IF (attrib%type==integer0) CALL  file__set(pt_file,output_freq=attrib%integer0_ptr) ; RETURN
+      CASE (file__output_level)
+        IF (attrib%type==integer0) CALL  file__set(pt_file,output_level=attrib%integer0_ptr) ; RETURN
+      CASE (file__enabled)
+        IF (attrib%type==logical0) CALL  file__set(pt_file,enabled=attrib%logical0_ptr) ; RETURN
+     END SELECT
+
+     WRITE(message,*) 'file attribut ',attrib%name,' : type : ',attrib%type,       &
+                      ' : Attribute type is incompatible with the provided value'
+     CALL error('mod_file::file__set_attribut')
+    
+  END SUBROUTINE file__set_attribut_pt
+  
+     
+  SUBROUTINE file__get_field_list(pt_file,pt_field_list)
+  IMPLICIT NONE
+    TYPE(file),POINTER         :: pt_file
+    TYPE(field_group),POINTER  :: pt_field_list
+    
+      pt_field_list=>pt_file%field_list
+  
+  END SUBROUTINE file__get_field_list
+    
+  SUBROUTINE file__print(pt_file)
+  IMPLICIT NONE
+    TYPE(file), POINTER         :: pt_file
+
+    PRINT *,"---- FILE ----"
+    IF (pt_file%has_id) THEN
+      PRINT *,"id = ",TRIM(pt_file%id)
+    ELSE
+      PRINT *,"id undefined"
+    ENDIF
+    
+    IF (pt_file%has_name) THEN
+      PRINT *,"name = ",TRIM(pt_file%name)
+    ELSE
+      PRINT *,"name undefined"
+    ENDIF
+
+    IF (pt_file%has_name_suffix) THEN
+      PRINT *,"name_suffix = ",TRIM(pt_file%name_suffix)
+    ELSE
+      PRINT *,"name_suffix undefined"
+    ENDIF
+    
+    IF (pt_file%has_description) THEN
+      PRINT *,"description = ",TRIM(pt_file%description)
+    ELSE
+      PRINT *,"description undefined"
+    ENDIF
+ 
+    IF (pt_file%has_output_freq) THEN
+      PRINT *,"output_freq = ",pt_file%output_freq
+    ELSE
+      PRINT *,"output_freq undefined"
+    ENDIF
+
+    IF (pt_file%has_output_level) THEN
+      PRINT *,"output_level = ",pt_file%output_level
+    ELSE
+      PRINT *,"output_level undefined"
+    ENDIF
+
+    IF (pt_file%has_enabled) THEN
+      PRINT *,"enabled = ",pt_file%enabled
+    ELSE
+      PRINT *,"enabled undefined"
+    ENDIF
+
+    PRINT *,"field_list :"
+    CALL field_group__print(pt_file%field_list)
+
+    PRINT *,"--------------"
+
+  END SUBROUTINE file__print
+
+
+  SUBROUTINE file__apply_default(pt_file_default, pt_file_in, pt_file_out)
+
+    TYPE(file), POINTER :: pt_file_default, pt_file_in, pt_file_out
+
+    IF (pt_file_in%has_name) THEN
+        pt_file_out%name=pt_file_in%name
+        pt_file_out%has_name=.TRUE.
+    ELSE IF ( pt_file_default%has_name) THEN
+        pt_file_out%name=pt_file_default%name
+        pt_file_out%has_name=.TRUE.
+    ELSE
+        pt_file_out%has_name=.FALSE.
+    ENDIF
+
+    IF (pt_file_in%has_name_suffix) THEN
+        pt_file_out%name_suffix=pt_file_in%name_suffix
+        pt_file_out%has_name_suffix=.TRUE.
+    ELSE IF ( pt_file_default%has_name_suffix) THEN
+        pt_file_out%name_suffix=pt_file_default%name_suffix
+        pt_file_out%has_name_suffix=.TRUE.
+    ELSE
+        pt_file_out%has_name_suffix=.FALSE.
+    ENDIF
+        
+    IF (pt_file_in%has_description) THEN
+        pt_file_out%description=pt_file_in%description
+        pt_file_out%has_description=.TRUE.
+    ELSE IF ( pt_file_default%has_description ) THEN
+        pt_file_out%description=pt_file_default%description
+        pt_file_out%has_description=.TRUE.
+    ELSE
+        pt_file_out%has_description=.FALSE.
+    ENDIF
+
+    IF (pt_file_in%has_output_freq) THEN
+        pt_file_out%output_freq=pt_file_in%output_freq
+        pt_file_out%has_output_freq=.TRUE.
+    ELSE IF ( pt_file_default%has_output_freq ) THEN
+        pt_file_out%output_freq=pt_file_default%output_freq
+        pt_file_out%has_output_freq=.TRUE.
+    ELSE
+        pt_file_out%has_output_freq=.FALSE.
+    ENDIF
+
+    IF (pt_file_in%has_output_level) THEN
+        pt_file_out%output_level=pt_file_in%output_level
+        pt_file_out%has_output_level=.TRUE.
+    ELSE IF ( pt_file_default%has_output_level ) THEN
+        pt_file_out%output_level=pt_file_default%output_level
+        pt_file_out%has_output_level=.TRUE.
+    ELSE
+        pt_file_out%has_output_level=.FALSE.
+    ENDIF
+
+    IF (pt_file_in%has_enabled) THEN
+        pt_file_out%enabled=pt_file_in%enabled
+        pt_file_out%has_enabled=.TRUE.
+    ELSE IF ( pt_file_default%has_enabled ) THEN
+        pt_file_out%enabled=pt_file_default%enabled
+        pt_file_out%has_enabled=.TRUE.
+    ELSE
+        pt_file_out%has_enabled=.FALSE.
+    ENDIF
+    
+    CALL field_group__apply_default(pt_file_out%field_list)
+
+
+  END SUBROUTINE file__apply_default
+
+   
+  SUBROUTINE file__solve_field_ref(pt_file)
+  IMPLICIT NONE
+    TYPE(file), POINTER :: pt_file
+    
+    CALL field_group__solve_ref(pt_file%field_list)
+  
+  END SUBROUTINE file__solve_field_ref
+  
+  
+  SUBROUTINE file__Check(pt_file)
+  USE error_msg
+  IMPLICIT NONE
+    TYPE(file), POINTER :: pt_file
+      
+    IF (.NOT. pt_file%has_name) THEN
+      IF (pt_file%has_id) THEN
+        pt_file%name=TRIM(pt_file%id)
+      ELSE
+        WRITE(message,*) "File has no name and no id" 
+        CALL error("mod_file::file__check")
+      ENDIF 
+    ENDIF
+ 
+ END SUBROUTINE file__Check
+    
+END MODULE mod_file
Index: /vendors/XMLIO_SERVER/current/src/XMLIO/mod_file_attribut.f90
===================================================================
--- /vendors/XMLIO_SERVER/current/src/XMLIO/mod_file_attribut.f90	(revision 1897)
+++ /vendors/XMLIO_SERVER/current/src/XMLIO/mod_file_attribut.f90	(revision 1897)
@@ -0,0 +1,16 @@
+MODULE mod_file_attribut
+  USE mod_object
+  
+  INTEGER,PARAMETER :: file__begin = file_object + 10
+    
+  INTEGER,PARAMETER :: file__name = file_object + 11
+  INTEGER,PARAMETER :: file__description = file_object + 12
+  INTEGER,PARAMETER :: file__output_freq = file_object + 13
+  INTEGER,PARAMETER :: file__output_level = file_object + 14
+  INTEGER,PARAMETER :: file__enabled = file_object + 15
+  INTEGER,PARAMETER :: file__name_suffix = file_object + 16
+
+  INTEGER,PARAMETER :: file__end = file_object + 17
+
+END MODULE mod_file_attribut
+  
Index: /vendors/XMLIO_SERVER/current/src/XMLIO/mod_file_definition.f90
===================================================================
--- /vendors/XMLIO_SERVER/current/src/XMLIO/mod_file_definition.f90	(revision 1897)
+++ /vendors/XMLIO_SERVER/current/src/XMLIO/mod_file_definition.f90	(revision 1897)
@@ -0,0 +1,24 @@
+MODULE mod_file_definition
+  USE mod_file_group
+  
+  TYPE(file_group),SAVE,POINTER :: file_definition
+  
+CONTAINS
+
+  SUBROUTINE file_definition__swap_context(saved_file_definition)
+  IMPLICIT NONE
+    TYPE(file_group),POINTER      :: saved_file_definition
+     
+    file_definition=>saved_file_definition
+ 
+  END SUBROUTINE file_definition__swap_context
+
+  SUBROUTINE file_definition__Init
+  USE mod_file_group
+  IMPLICIT NONE
+  
+    CALL file_group__new(file_definition,"file_definition")
+    
+  END SUBROUTINE file_definition__Init
+        
+END MODULE mod_file_definition
Index: /vendors/XMLIO_SERVER/current/src/XMLIO/mod_file_group.f90
===================================================================
--- /vendors/XMLIO_SERVER/current/src/XMLIO/mod_file_group.f90	(revision 1897)
+++ /vendors/XMLIO_SERVER/current/src/XMLIO/mod_file_group.f90	(revision 1897)
@@ -0,0 +1,259 @@
+MODULE mod_file_group
+  USE mod_file
+  USE mod_xmlio_parameters
+
+  IMPLICIT NONE
+
+  TYPE file_group
+    CHARACTER(LEN=str_len)                    :: id
+    LOGICAL                                   :: has_id
+    TYPE(vector_file_group), POINTER          :: groups
+    TYPE(vector_file),POINTER                 :: files     
+    TYPE(file), POINTER                       :: default_attribut
+  END TYPE file_group
+
+  INCLUDE "vector_file_group_def.inc"  
+
+  TYPE(vector_file_group),POINTER,SAVE       :: file_group_Ids
+  TYPE(sorted_list),POINTER,PRIVATE,SAVE     :: Ids 
+
+  INTERFACE file_group__set_attribut
+    MODULE PROCEDURE file_group__set_attribut_id,file_group__set_attribut_pt
+  END INTERFACE
+
+CONTAINS
+
+  INCLUDE "vector_file_group_contains.inc"
+
+  SUBROUTINE file_group__swap_context(saved_file_group_ids,saved_ids)
+  IMPLICIT NONE
+    TYPE(vector_file_group),POINTER      :: saved_file_group_Ids
+    TYPE(sorted_list),POINTER            :: saved_Ids
+    
+    file_group_ids=>saved_file_group_ids
+    ids=>saved_ids 
+ 
+  END SUBROUTINE file_group__swap_context
+
+  SUBROUTINE file_group__init
+  IMPLICIT NONE
+    
+    CALL vector_file_group__new(file_group_Ids)
+    CALL sorted_list__new(Ids)
+   
+  END SUBROUTINE file_group__init
+
+  SUBROUTINE file_group__get(Id,Pt_fg)
+  USE string_function
+  IMPLICIT NONE
+    CHARACTER(LEN=*),INTENT(IN)     :: Id
+    TYPE(file_group),POINTER        :: Pt_fg
+
+    INTEGER                         :: Pos
+    LOGICAL                         :: success
+    
+    CALL sorted_list__find(Ids,hash(Id),Pos,success)
+    IF (success) THEN
+      Pt_fg=>file_group_ids%at(Pos)%Pt
+    ELSE
+      Pt_fg=>NULL()
+    ENDIF
+    
+  END SUBROUTINE file_group__get
+
+  SUBROUTINE file_group__set_attribut_id(id,attrib,Ok)
+  USE mod_attribut
+  USE error_msg
+  IMPLICIT NONE
+    CHARACTER(LEN=*),INTENT(IN) :: id
+    TYPE(attribut),INTENT(IN) :: attrib
+    LOGICAL,OPTIONAL,INTENT(out)  :: Ok
+    
+    TYPE(file_group),POINTER             :: Pt_fg
+    INTEGER                         :: Pos
+    LOGICAL                         :: success
+    
+    CALL sorted_list__find(Ids,hash(Id),Pos,success)
+    IF (success) THEN
+      Pt_fg=>file_group_ids%at(Pos)%Pt
+      CALL file_group__set_attribut(Pt_fg,attrib)
+      IF (PRESENT(OK)) ok=.TRUE.
+    ELSE
+      IF (.NOT.PRESENT(OK)) THEN
+        WRITE(message,*) 'file group id :',id,' is undefined'
+        CALL error('mod_file_group::file_group__set_attribut')
+      ELSE
+        OK=.FALSE.
+      ENDIF
+    ENDIF 
+    
+  END SUBROUTINE file_group__set_attribut_id
+  
+  SUBROUTINE file_group__set_attribut_pt(pt_fg,attrib)
+  USE mod_attribut
+  USE mod_object
+  IMPLICIT NONE
+    TYPE(file_group),POINTER :: Pt_fg
+    TYPE(attribut),INTENT(IN) :: attrib
+     
+    IF (attrib%object==file_object) THEN
+      CALL file__set_attribut(Pt_fg%default_attribut,attrib)
+    ENDIF
+    
+  END SUBROUTINE file_group__set_attribut_pt
+  
+      
+  RECURSIVE SUBROUTINE file_group__new(Pt_fg,Id)
+  USE string_function
+  IMPLICIT NONE
+    TYPE(file_group),POINTER                :: Pt_fg
+    CHARACTER(LEN=*),OPTIONAL,INTENT(IN)     :: Id
+    
+    INTEGER :: Pos
+    
+    ALLOCATE(Pt_fg%groups)
+    ALLOCATE(Pt_fg%files)
+    ALLOCATE(Pt_fg%default_attribut)
+    
+    CALL vector_file_group__new(Pt_fg%groups)
+    CALL vector_file__new(Pt_fg%files)
+    CALL file__new(Pt_fg%default_attribut)
+    Pt_fg%has_id=.FALSE.
+      
+    IF (PRESENT(Id)) THEN
+      Pt_fg%id=TRIM(Id)
+      Pt_fg%has_id=.TRUE.
+      CALL vector_file_group__set_new(file_group_Ids,Pt_fg,Pos)
+      CALL sorted_list__Add(Ids,hash(id),Pos)
+    ENDIF
+
+  END SUBROUTINE file_group__new
+
+      
+  SUBROUTINE file_group__get_new_group(Pt_fg,Pt_fg_out,Id)
+  IMPLICIT NONE
+    TYPE(file_group),POINTER             :: Pt_fg
+    TYPE(file_group),POINTER             :: Pt_fg_out
+    CHARACTER(LEN=*),OPTIONAL      :: Id
+    
+    CALL vector_file_group__get_new(Pt_fg%groups,Pt_fg_out)
+    CALL file_group__new(Pt_fg_out)
+
+    IF (PRESENT(id)) THEN
+      CALL file_group__new(Pt_fg_out,Id)
+    ELSE
+      CALL file_group__new(Pt_fg_out)
+    ENDIF
+    
+  END SUBROUTINE file_group__get_new_group
+
+  
+  SUBROUTINE file_group__get_new_file(Pt_fg,Pt_f_out,Id)
+  IMPLICIT NONE
+    TYPE(file_group),POINTER            :: Pt_fg
+    TYPE(file),POINTER                  :: Pt_f_out
+    CHARACTER(LEN=*),OPTIONAL      :: Id
+    
+    CALL vector_file__get_new(Pt_fg%files,Pt_f_out)
+    
+    IF (PRESENT(id)) THEN
+      CALL file__new(Pt_f_out,Id)
+    ELSE
+      CALL file__new(Pt_f_out)
+    ENDIF
+    
+  END SUBROUTINE file_group__get_new_file
+  
+  
+  SUBROUTINE file_group__get_default_attrib(Pt_fg,Pt_f)
+  IMPLICIT NONE
+    TYPE(file_group),POINTER  :: Pt_fg
+    TYPE(file),POINTER        :: Pt_f
+    
+    Pt_f=>Pt_fg%default_attribut
+  END SUBROUTINE file_group__get_default_attrib
+  
+  RECURSIVE SUBROUTINE file_group__apply_default(Pt_fg,default)
+  IMPLICIT NONE
+    TYPE(file_group),POINTER  :: Pt_fg
+    TYPE(file),POINTER,OPTIONAL        :: default
+    
+    INTEGER :: i
+    
+    IF (PRESENT(default)) THEN
+      CALL file__apply_default(default,Pt_fg%default_attribut,Pt_fg%default_attribut)
+    ENDIF
+      
+    DO i=1,Pt_fg%groups%size
+      CALL file_group__apply_default(Pt_fg%groups%at(i)%pt,Pt_fg%default_attribut)
+    ENDDO
+    
+    DO i=1,Pt_fg%files%size
+      CALL file__apply_default(Pt_fg%default_attribut,Pt_fg%files%at(i)%pt,Pt_fg%files%at(i)%pt)
+    ENDDO
+  
+  END SUBROUTINE file_group__apply_default
+
+  RECURSIVE SUBROUTINE file_group__solve_field_ref(pt_fg)
+  IMPLICIT NONE
+    TYPE(file_group),POINTER  :: Pt_fg
+
+    INTEGER :: i
+
+    DO i=1,Pt_fg%groups%size
+      CALL file_group__solve_field_ref(Pt_fg%groups%at(i)%pt)
+    ENDDO
+    
+    DO i=1,Pt_fg%files%size
+      CALL file__solve_field_ref(Pt_fg%files%at(i)%pt)
+    ENDDO
+  
+  END SUBROUTINE file_group__solve_field_ref
+  
+  
+  RECURSIVE SUBROUTINE file_group__print(Pt_fg)
+  IMPLICIT NONE
+    TYPE(file_group),POINTER  :: Pt_fg
+   
+    INTEGER :: i
+    
+    PRINT *,"--- FILE GROUP ---"
+    IF (Pt_fg%has_id) THEN
+      PRINT *,"id :",TRIM(Pt_fg%id)
+    ELSE
+      PRINT *,"id undefined"
+    ENDIF
+    
+    PRINT *,"file default attribut :"
+    CALL file__print(Pt_fg%default_attribut)    
+
+    PRINT *,"owned file groups :"      
+    DO i=1,Pt_fg%groups%size
+      CALL file_group__print(Pt_fg%groups%at(i)%pt)
+    ENDDO
+
+    PRINT *,"owned file :"      
+    DO i=1,Pt_fg%files%size
+      CALL file__print(Pt_fg%files%at(i)%pt)
+    ENDDO
+  
+  END SUBROUTINE file_group__print     
+
+  RECURSIVE SUBROUTINE file_group__Check(Pt_fg)
+  IMPLICIT NONE
+  
+    TYPE(file_group),POINTER  :: Pt_fg
+    INTEGER :: i
+   
+    DO i=1,Pt_fg%groups%size
+      CALL file_group__check(pt_fg%groups%at(i)%pt)
+    ENDDO
+
+    DO i=1,Pt_fg%files%size
+      CALL file__check(pt_fg%files%at(i)%pt)
+    ENDDO
+  
+  END SUBROUTINE file_group__check     
+          
+END MODULE mod_file_group
+
Index: /vendors/XMLIO_SERVER/current/src/XMLIO/mod_grid.f90
===================================================================
--- /vendors/XMLIO_SERVER/current/src/XMLIO/mod_grid.f90	(revision 1897)
+++ /vendors/XMLIO_SERVER/current/src/XMLIO/mod_grid.f90	(revision 1897)
@@ -0,0 +1,384 @@
+MODULE mod_grid
+  USE mod_xmlio_parameters
+  USE mod_sorted_list
+  USE mod_domain
+  USE mod_zoom
+
+  IMPLICIT NONE
+
+  TYPE, PUBLIC :: grid
+    CHARACTER(len=str_len)      :: id
+    LOGICAL                     :: has_id
+    CHARACTER(len=str_len)      :: name
+    LOGICAL                     :: has_name
+    CHARACTER(len=str_len)      :: description
+    LOGICAL                     :: has_description
+    TYPE(domain),POINTER        :: domain
+    TYPE(vector_domain),POINTER :: subdomain
+    TYPE(sorted_list),POINTER   :: rank_ids
+    INTEGER,POINTER             :: ranks(:)
+    INTEGER                     :: ni
+    INTEGER                     :: nj
+    LOGICAL                     :: has_dimension
+    TYPE(vector_zoom),POINTER   :: associated_zoom
+    TYPE(zoom),POINTER          :: global_zoom
+  END TYPE grid
+
+  INCLUDE 'vector_grid_def.inc'
+  
+  TYPE(vector_grid),POINTER,SAVE             :: grid_Ids
+  TYPE(sorted_list),POINTER,SAVE,PRIVATE     :: Ids 
+
+  INTERFACE grid__set_attribut
+    MODULE PROCEDURE grid__set_attribut_id,grid__set_attribut_pt
+  END INTERFACE
+
+CONTAINS
+  INCLUDE 'vector_grid_contains.inc'
+
+  SUBROUTINE grid__swap_context(saved_grid_Ids,saved_Ids)
+  IMPLICIT NONE
+    TYPE(vector_grid),POINTER          :: saved_grid_Ids
+    TYPE(sorted_list),POINTER          :: saved_Ids 
+    
+    grid_ids=>saved_grid_ids
+    ids=>saved_ids
+  END SUBROUTINE grid__swap_context
+  
+  
+  SUBROUTINE grid__init
+  IMPLICIT NONE
+    
+    CALL vector_grid__new(grid_Ids)
+    CALL sorted_list__new(Ids)
+   
+  END SUBROUTINE grid__init
+  
+  SUBROUTINE grid__get(Id,Pt_grid)
+  USE string_function
+  IMPLICIT NONE
+    CHARACTER(LEN=*),INTENT(IN)     :: Id
+    TYPE(grid),POINTER              :: Pt_grid
+
+    INTEGER                         :: Pos
+    LOGICAL                         :: success
+    
+    CALL sorted_list__find(Ids,hash(Id),Pos,success)
+    IF (success) THEN
+      Pt_grid=>grid_ids%at(Pos)%Pt
+    ELSE
+      Pt_grid=>NULL()
+    ENDIF
+    
+  END SUBROUTINE grid__get
+  
+  SUBROUTINE grid__new(pt_grid,Id)
+  USE string_function
+  IMPLICIT NONE
+   TYPE(grid), POINTER           :: pt_grid
+   CHARACTER(LEN=*),OPTIONAL     :: Id
+   INTEGER                       :: Pos
+   
+   ALLOCATE(pt_grid%domain)
+   ALLOCATE(pt_grid%subdomain)
+   ALLOCATE(pt_grid%rank_ids)
+   ALLOCATE(pt_grid%associated_zoom)
+   
+   CALL domain__new(pt_grid%domain)
+   CALL vector_domain__new(pt_grid%subdomain)
+   CALL sorted_list__new(pt_grid%rank_ids)
+   CALL vector_zoom__new(pt_grid%associated_zoom)
+   
+   pt_grid%has_id          = .FALSE.
+   pt_grid%has_name        = .FALSE.
+   pt_grid%has_description = .FALSE.
+   pt_grid%has_dimension   = .FALSE.
+   
+   IF (PRESENT(Id)) THEN
+     Pt_grid%id=TRIM(ADJUSTL(Id))
+     Pt_grid%has_id=.TRUE.
+     CALL vector_grid__set_new(grid_Ids,Pt_grid,Pos)
+     CALL sorted_list__Add(Ids,hash(id),Pos)
+   ENDIF
+   
+   CALL grid__get_new_zoom(pt_grid,pt_grid%global_zoom,id)
+
+ END SUBROUTINE grid__new
+
+  SUBROUTINE grid__set(pt_grid, name, description)
+  IMPLICIT NONE
+    TYPE(grid), POINTER :: pt_grid
+    CHARACTER(len=*)  ,OPTIONAL :: name
+    CHARACTER(len=*)  ,OPTIONAL :: description
+
+    IF (PRESENT(name)) THEN
+        pt_grid%name=TRIM(ADJUSTL(name))
+        pt_grid%has_name = .TRUE.
+    ENDIF
+
+    IF (PRESENT(description)) THEN
+        pt_grid%description=TRIM(ADJUSTL(description))
+        pt_grid%has_description = .TRUE.
+    ENDIF
+
+  END SUBROUTINE grid__set
+
+
+  SUBROUTINE grid__set_attribut_id(id,attrib,ok)
+  USE mod_attribut
+  USE error_msg
+  IMPLICIT NONE
+    CHARACTER(LEN=*),INTENT(IN)   :: id
+    TYPE(attribut),INTENT(IN)     :: attrib
+    LOGICAL,OPTIONAL,INTENT(OUT)  :: ok
+    
+    TYPE(grid),POINTER              :: Pt_grid
+    INTEGER                         :: Pos
+    LOGICAL                         :: success
+    
+    CALL sorted_list__find(Ids,hash(Id),Pos,success)
+    IF (success) THEN
+      Pt_grid=>grid_ids%at(Pos)%Pt
+      CALL grid__set_attribut_pt(Pt_grid,attrib)
+      IF (PRESENT(OK)) OK=.TRUE.
+    ELSE
+      IF (.NOT.PRESENT(OK)) THEN
+        WRITE(message,*) 'grid id :',id,'is undefined'
+        CALL error('mod_grid::grid__set_attribut')
+      ELSE
+        OK=.FALSE.
+      ENDIF
+    ENDIF  
+  
+  END SUBROUTINE grid__set_attribut_id
+      
+  SUBROUTINE grid__set_attribut_pt(Pt_grid,attrib)
+  USE mod_attribut
+  USE mod_grid_attribut
+  USE error_msg
+  IMPLICIT NONE
+    TYPE(grid),POINTER        :: Pt_grid
+    TYPE(attribut),INTENT(IN) :: attrib
+    
+    SELECT CASE(attrib%name)
+      CASE (grid__name)
+        IF (attrib%type==string0) CALL  grid__set(pt_grid,name=attrib%string0_ptr) ; RETURN
+      CASE (grid__description)
+        IF (attrib%type==string0) CALL  grid__set(pt_grid,description=attrib%string0_ptr) ; RETURN
+     END SELECT
+
+     WRITE(message,*) 'grid attribut ',attrib%name,' : type :',attrib%type,      &
+                      ' : Attribute type is incompatible with the provided value'
+     CALL error('mod_grid::grid__set_attribut')
+    
+  END SUBROUTINE grid__set_attribut_pt
+  
+  SUBROUTINE grid__set_dimension(pt_grid, ni, nj)
+  IMPLICIT NONE
+    TYPE(grid), POINTER   :: pt_grid
+    INTEGER,INTENT(IN)    :: ni
+    INTEGER,INTENT(IN)    :: nj
+    
+    pt_grid%ni=ni
+    pt_grid%nj=nj
+    pt_grid%has_dimension=.TRUE.
+    
+  END SUBROUTINE grid__set_dimension
+    
+
+  SUBROUTINE grid__get_new_subdomain(Pt_grid,rank,pt_domain)
+  IMPLICIT NONE
+    TYPE(grid), POINTER   :: pt_grid
+    INTEGER,INTENT(IN)    :: rank
+    TYPE(domain), POINTER :: Pt_domain
+    
+    INTEGER :: Pos
+    
+    CALL vector_domain__get_new(pt_grid%subdomain,pt_domain,Pos)
+    CALL sorted_list__add(pt_grid%rank_ids,rank,Pos)
+    CALL domain__new(pt_domain)
+    
+  END SUBROUTINE grid__get_new_subdomain    
+
+  SUBROUTINE grid__get_subdomain(Pt_grid,rank,pt_domain)
+  IMPLICIT NONE
+    TYPE(grid), POINTER     :: pt_grid
+    INTEGER,INTENT(IN)      :: rank
+    TYPE(domain), POINTER   :: Pt_domain
+
+    INTEGER    :: rank_id
+    LOGICAL    :: success
+
+    CALL sorted_list__find(pt_grid%rank_ids,rank,rank_id,success)
+    IF (success) THEN
+      pt_domain=>pt_grid%subdomain%at(rank_id)%pt
+    ELSE
+      !! message d'erreur 
+   ENDIF
+
+  END SUBROUTINE grid__get_subdomain
+   
+  SUBROUTINE grid__process_domain(Pt_grid)
+  IMPLICIT NONE
+    TYPE(grid), POINTER  :: pt_grid
+    TYPE(domain),POINTER :: subdomain
+    TYPE(zoom),POINTER :: pt_zoom
+    
+    REAL,ALLOCATABLE :: lon(:,:)
+    REAL,ALLOCATABLE :: lat(:,:)
+    INTEGER :: ib,ie,jb,je,ni,nj,ibegin,jbegin,iend,jend
+    INTEGER :: i
+    
+      ALLOCATE(pt_grid%ranks(1:pt_grid%subdomain%size))
+
+      DO i=1,pt_grid%subdomain%size
+        subdomain=>pt_grid%subdomain%at(i)%pt
+        IF (i==1) THEN
+          ib=subdomain%ibegin
+          ie=subdomain%iend   
+          jb=subdomain%jbegin
+          je=subdomain%jend
+        ELSE
+          IF (subdomain%ibegin<ib) ib=subdomain%ibegin
+          IF (subdomain%iend>ie) ie=subdomain%iend
+          IF (subdomain%jbegin<jb) jb=subdomain%jbegin
+          IF (subdomain%jend>je) je=subdomain%jend
+        ENDIF
+        pt_grid%ranks(subdomain%rank)=i
+      ENDDO
+      
+      ni=ie-ib+1
+      nj=je-jb+1
+      ibegin=ib
+      jbegin=jb
+      
+      ALLOCATE(lon(ni,nj))
+      ALLOCATE(lat(ni,nj))
+      
+      DO i=1,pt_grid%subdomain%size
+        subdomain=>pt_grid%subdomain%at(i)%pt
+        ib=subdomain%ibegin-ibegin+1
+        ie=subdomain%iend-ibegin+1   
+        jb=subdomain%jbegin-jbegin+1
+        je=subdomain%jend-jbegin+1
+        lon(ib:ie,jb:je)=subdomain%lon(:,:)
+        lat(ib:ie,jb:je)=subdomain%lat(:,:)
+      ENDDO
+      
+      CALL domain__set(pt_grid%domain,0,ni,nj,ibegin,jbegin,lon,lat)
+      iend=ibegin+ni-1
+      jend=jbegin+nj-1
+      
+      
+      pt_grid%global_zoom%ni_glo=pt_grid%ni
+      pt_grid%global_zoom%nj_glo=pt_grid%nj
+      pt_grid%global_zoom%ibegin_glo=1      
+      pt_grid%global_zoom%jbegin_glo=1
+      
+      DO i=1,pt_grid%associated_zoom%size
+        pt_zoom=>pt_grid%associated_zoom%at(i)%pt
+        
+        ib=MAX(pt_zoom%ibegin_glo-ibegin+1,1)
+        ie=MIN(pt_zoom%ibegin_glo+pt_zoom%ni_glo-ibegin,ni)
+        pt_zoom%ni_loc=MAX(ie-ib+1,0)
+        pt_zoom%ibegin_loc=ib
+
+        jb=MAX(pt_zoom%jbegin_glo-jbegin+1,1)
+        je=MIN(pt_zoom%jbegin_glo+pt_zoom%nj_glo-jbegin,nj)
+        pt_zoom%nj_loc=MAX(je-jb+1,0)
+        pt_zoom%jbegin_loc=jb
+      ENDDO
+                 
+            
+      DEALLOCATE(lon)
+      DEALLOCATE(lat)
+      
+    END SUBROUTINE grid__process_domain
+      
+            
+  SUBROUTINE grid__get_new_zoom(pt_grid,pt_zoom,zoom_id)
+  USE string_function
+  IMPLICIT NONE
+    TYPE(grid), POINTER                      :: pt_grid
+    TYPE(zoom),POINTER                       :: pt_zoom
+    CHARACTER(LEN=*),INTENT(IN),OPTIONAL     :: zoom_id
+    LOGICAL                                  :: success
+    
+     CALL vector_zoom__get_new(pt_grid%associated_zoom,Pt_zoom)
+     CALL zoom__new(Pt_zoom,zoom_id)
+    
+   END SUBROUTINE grid__get_new_zoom
+     
+  SUBROUTINE grid__print(pt_grid)
+  IMPLICIT NONE
+    TYPE(grid), POINTER  :: pt_grid
+    INTEGER              :: i
+    
+    PRINT *,"---- GRID ----"
+    
+    IF (pt_grid%has_id) THEN
+      PRINT *,"id = ",TRIM(pt_grid%id)
+    ELSE
+      PRINT *,"id undefined"
+    ENDIF
+    
+    IF (pt_grid%has_name) THEN
+      PRINT *,"name = ",TRIM(pt_grid%name)
+    ELSE
+      PRINT *,"name undefined"
+    ENDIF
+    
+    IF (pt_grid%has_description) THEN
+      PRINT *,"description = ",TRIM(pt_grid%description)
+    ELSE
+      PRINT *,"description undefined"
+    ENDIF
+    
+    IF (pt_grid%has_dimension) THEN
+      PRINT *,"Global grid dimension :"
+      PRINT *,"   ni =",pt_grid%ni
+      PRINT *,"   nj =",pt_grid%nj
+    ELSE
+      PRINT *,"Global dimension ni, nj undefined"
+    ENDIF
+    
+    PRINT *,"grid domain :"
+    CALL domain__print(pt_grid%domain)
+    
+    PRINT *,"grid subdomain :",pt_grid%subdomain%size
+    
+    DO i=1,pt_grid%subdomain%size
+      CALL domain__print(pt_grid%subdomain%at(i)%pt)
+    ENDDO
+    
+    PRINT *,"--------------"
+    
+  END SUBROUTINE grid__print
+
+  SUBROUTINE grid__apply_default(pt_grid_default, pt_grid_in, pt_grid_out)
+
+    TYPE(grid), POINTER :: pt_grid_default, pt_grid_in, pt_grid_out
+
+    IF (pt_grid_in%has_name) THEN
+        pt_grid_out%name=pt_grid_in%name
+        pt_grid_out%has_name=.TRUE.
+    ELSE IF ( pt_grid_default%has_name) THEN
+        pt_grid_out%name=pt_grid_default%name
+        pt_grid_out%has_name=.TRUE.
+    ELSE
+        pt_grid_out%has_name=.FALSE.
+    ENDIF
+        
+    IF (pt_grid_in%has_description) THEN
+        pt_grid_out%description=pt_grid_in%description
+        pt_grid_out%has_description=.TRUE.
+    ELSE IF ( pt_grid_default%has_description ) THEN
+        pt_grid_out%description=pt_grid_default%description
+        pt_grid_out%has_description=.TRUE.
+    ELSE
+        pt_grid_out%has_description=.FALSE.
+    ENDIF
+  
+  END SUBROUTINE grid__apply_default
+
+END MODULE mod_grid
Index: /vendors/XMLIO_SERVER/current/src/XMLIO/mod_grid_attribut.f90
===================================================================
--- /vendors/XMLIO_SERVER/current/src/XMLIO/mod_grid_attribut.f90	(revision 1897)
+++ /vendors/XMLIO_SERVER/current/src/XMLIO/mod_grid_attribut.f90	(revision 1897)
@@ -0,0 +1,13 @@
+MODULE mod_grid_attribut
+  USE mod_object
+  
+  INTEGER,PARAMETER :: grid__begin = grid_object + 10
+
+  INTEGER,PARAMETER :: grid__name = grid_object + 11
+  INTEGER,PARAMETER :: grid__description = grid_object + 12
+
+  INTEGER,PARAMETER :: grid__end = grid_object + 13
+
+  
+END MODULE mod_grid_attribut
+  
Index: /vendors/XMLIO_SERVER/current/src/XMLIO/mod_grid_definition.f90
===================================================================
--- /vendors/XMLIO_SERVER/current/src/XMLIO/mod_grid_definition.f90	(revision 1897)
+++ /vendors/XMLIO_SERVER/current/src/XMLIO/mod_grid_definition.f90	(revision 1897)
@@ -0,0 +1,24 @@
+MODULE mod_grid_definition
+  USE mod_grid_group
+  
+  TYPE(grid_group),SAVE,POINTER :: grid_definition
+  
+CONTAINS
+
+  SUBROUTINE grid_definition__swap_context(saved_grid_definition)      
+  IMPLICIT NONE
+    TYPE(grid_group),POINTER :: saved_grid_definition
+    
+    grid_definition=>saved_grid_definition
+    
+  END SUBROUTINE grid_definition__swap_context 
+
+  SUBROUTINE grid_definition__Init
+  USE mod_grid_group
+  IMPLICIT NONE
+  
+    CALL grid_group__new(grid_definition,"grid_definition")
+    
+  END SUBROUTINE grid_definition__Init
+ 
+END MODULE mod_grid_definition
Index: /vendors/XMLIO_SERVER/current/src/XMLIO/mod_grid_group.f90
===================================================================
--- /vendors/XMLIO_SERVER/current/src/XMLIO/mod_grid_group.f90	(revision 1897)
+++ /vendors/XMLIO_SERVER/current/src/XMLIO/mod_grid_group.f90	(revision 1897)
@@ -0,0 +1,244 @@
+MODULE mod_grid_group
+  USE mod_grid
+  USE mod_xmlio_parameters
+
+  IMPLICIT NONE
+
+  TYPE grid_group
+    CHARACTER(LEN=str_len)                    :: id
+    LOGICAL                                   :: has_id
+    TYPE(vector_grid_group), POINTER          :: groups
+    TYPE(vector_grid),POINTER                 :: grids     
+    TYPE(grid), POINTER                       :: default_attribut
+  END TYPE grid_group
+
+  INCLUDE "vector_grid_group_def.inc"  
+
+  TYPE(vector_grid_group),POINTER,SAVE       :: grid_group_Ids
+  TYPE(sorted_list),POINTER,SAVE,PRIVATE     :: Ids 
+
+  INTERFACE grid_group__set_attribut
+    MODULE PROCEDURE grid_group__set_attribut_id,grid_group__set_attribut_pt
+  END INTERFACE
+
+CONTAINS
+
+  INCLUDE "vector_grid_group_contains.inc"
+
+  SUBROUTINE grid_group__swap_context(saved_grid_group_Ids,saved_ids)
+  IMPLICIT NONE
+  TYPE(vector_grid_group),POINTER       :: saved_grid_group_Ids
+  TYPE(sorted_list),POINTER             :: saved_Ids 
+   
+   grid_group_ids=>saved_grid_group_ids
+   ids=>saved_ids
+   
+  END SUBROUTINE grid_group__swap_context
+   
+  SUBROUTINE grid_group__init
+  IMPLICIT NONE
+    
+    CALL vector_grid_group__new(grid_group_Ids)
+    CALL sorted_list__new(Ids)
+   
+  END SUBROUTINE grid_group__init
+
+  SUBROUTINE grid_group__get(Id,Pt_gg)
+  USE string_function
+  IMPLICIT NONE
+    CHARACTER(LEN=*),INTENT(IN)     :: Id
+    TYPE(grid_group),POINTER        :: Pt_gg
+
+    INTEGER                         :: Pos
+    LOGICAL                         :: success
+    
+    CALL sorted_list__find(Ids,hash(Id),Pos,success)
+    IF (success) THEN
+      Pt_gg=>grid_group_ids%at(Pos)%Pt
+    ELSE
+      Pt_gg=>NULL()
+    ENDIF
+    
+  END SUBROUTINE grid_group__get
+
+
+  SUBROUTINE grid_group__set_attribut_id(id,attrib,Ok)
+  USE mod_attribut
+  USE error_msg
+  IMPLICIT NONE
+    CHARACTER(LEN=*),INTENT(IN) :: id
+    TYPE(attribut),INTENT(IN) :: attrib
+    LOGICAL,OPTIONAL,INTENT(out)  :: Ok
+    
+    TYPE(grid_group),POINTER             :: Pt_gg
+    INTEGER                         :: Pos
+    LOGICAL                         :: success
+    
+    CALL sorted_list__find(Ids,hash(Id),Pos,success)
+    IF (success) THEN
+      Pt_gg=>grid_group_ids%at(Pos)%Pt
+      CALL grid_group__set_attribut(Pt_gg,attrib)
+      IF (PRESENT(OK)) ok=.TRUE.
+    ELSE
+      IF (.NOT.PRESENT(OK)) THEN
+        WRITE(message,*) 'grid group id :',id,'is undefined'
+        CALL error('mod_grid_group::grid_group__set_attribut')
+      ELSE
+        OK=.FALSE.
+      ENDIF
+    ENDIF 
+    
+  END SUBROUTINE grid_group__set_attribut_id
+  
+  SUBROUTINE grid_group__set_attribut_pt(pt_gg,attrib)
+  USE mod_attribut
+  USE mod_object
+  IMPLICIT NONE
+    TYPE(grid_group),POINTER :: Pt_gg
+    TYPE(attribut),INTENT(IN) :: attrib
+     
+    IF (attrib%object==grid_object) THEN
+      CALL grid__set_attribut(pt_gg%default_attribut,attrib)
+    ENDIF
+    
+  END SUBROUTINE grid_group__set_attribut_pt    
+
+
+
+  RECURSIVE SUBROUTINE grid_group__new(Pt_gg,Id)
+  USE string_function
+  IMPLICIT NONE
+    TYPE(grid_group),POINTER                :: Pt_gg
+    CHARACTER(LEN=*),OPTIONAL,INTENT(IN)     :: Id
+    
+    INTEGER :: Pos
+    
+    ALLOCATE(Pt_gg%groups)
+    ALLOCATE(Pt_gg%grids)
+    ALLOCATE(Pt_gg%default_attribut)
+    
+    CALL vector_grid_group__new(Pt_gg%groups)
+    CALL vector_grid__new(Pt_gg%grids)
+    CALL grid__new(Pt_gg%default_attribut)
+    Pt_gg%has_id=.FALSE.
+      
+    IF (PRESENT(Id)) THEN
+      Pt_gg%id=TRIM(Id)
+      Pt_gg%has_id=.TRUE.
+      CALL vector_grid_group__set_new(grid_group_Ids,Pt_gg,Pos)
+      CALL sorted_list__Add(Ids,hash(id),Pos)
+    ENDIF
+
+  END SUBROUTINE grid_group__new
+
+      
+  SUBROUTINE grid_group__get_new_group(Pt_gg,Pt_gg_out,Id)
+  IMPLICIT NONE
+    TYPE(grid_group),POINTER             :: Pt_gg
+    TYPE(grid_group),POINTER             :: Pt_gg_out
+    CHARACTER(LEN=*),OPTIONAL            :: Id
+    
+    CALL vector_grid_group__get_new(Pt_gg%groups,Pt_gg_out)
+    CALL grid_group__new(Pt_gg_out)
+
+    IF (PRESENT(id)) THEN
+      CALL grid_group__new(Pt_gg_out,Id)
+    ELSE
+      CALL grid_group__new(Pt_gg_out)
+    ENDIF
+    
+  END SUBROUTINE grid_group__get_new_group
+
+  
+  SUBROUTINE grid_group__get_new_grid(Pt_gg,Pt_g_out,Id)
+  IMPLICIT NONE
+    TYPE(grid_group),POINTER            :: Pt_gg
+    TYPE(grid),POINTER                  :: Pt_g_out
+    CHARACTER(LEN=*),OPTIONAL      :: Id
+    
+    CALL vector_grid__get_new(Pt_gg%grids,Pt_g_out)
+    
+    IF (PRESENT(id)) THEN
+      CALL grid__new(Pt_g_out,Id)
+    ELSE
+      CALL grid__new(Pt_g_out)
+    ENDIF
+    
+  END SUBROUTINE grid_group__get_new_grid
+  
+  
+  SUBROUTINE grid_group__get_default_attrib(Pt_gg,Pt_g)
+  IMPLICIT NONE
+    TYPE(grid_group),POINTER  :: Pt_gg
+    TYPE(grid),POINTER        :: Pt_g
+    
+    Pt_g=>Pt_gg%default_attribut
+  END SUBROUTINE grid_group__get_default_attrib
+  
+  RECURSIVE SUBROUTINE grid_group__apply_default(Pt_gg,default)
+  IMPLICIT NONE
+    TYPE(grid_group),POINTER      :: Pt_gg
+    TYPE(grid),POINTER,OPTIONAL   :: default
+    
+    INTEGER :: i
+    
+    IF (PRESENT(default)) THEN
+      CALL grid__apply_default(default,Pt_gg%default_attribut,Pt_gg%default_attribut)
+    ENDIF
+      
+    DO i=1,Pt_gg%groups%size
+      CALL grid_group__apply_default(Pt_gg%groups%at(i)%pt,Pt_gg%default_attribut)
+    ENDDO
+    
+    DO i=1,Pt_gg%grids%size
+      CALL grid__apply_default(Pt_gg%default_attribut,Pt_gg%grids%at(i)%pt,Pt_gg%grids%at(i)%pt)
+    ENDDO
+  
+  END SUBROUTINE grid_group__apply_default
+
+  RECURSIVE SUBROUTINE grid_group__Process_domain(Pt_gg)
+  IMPLICIT NONE
+  TYPE(grid_group),POINTER  :: Pt_gg
+    INTEGER :: i
+    
+    DO i=1,pt_gg%groups%size
+      CALL grid_group__process_domain(pt_gg%groups%at(i)%pt)
+    ENDDO
+    
+    DO i=1,pt_gg%grids%size
+      CALL grid__process_domain(pt_gg%grids%at(i)%pt)
+    ENDDO
+    
+  END SUBROUTINE grid_group__Process_domain
+      
+
+  RECURSIVE SUBROUTINE grid_group__print(Pt_gg)
+  IMPLICIT NONE
+    TYPE(grid_group),POINTER  :: Pt_gg
+   
+    INTEGER :: i
+    
+    PRINT *,"--- GRID GROUP ---"
+    IF (pt_gg%has_id) THEN
+      PRINT *,"id  ",TRIM(pt_gg%id)
+    ELSE
+      PRINT *,"id undefined"
+    ENDIF
+    
+    PRINT *,"grid default attribut :"
+    CALL grid__print(Pt_gg%default_attribut)    
+
+    PRINT *,"owned grid groups : ",Pt_gg%groups%size      
+    DO i=1,Pt_gg%groups%size
+      CALL grid_group__print(Pt_gg%groups%at(i)%pt)
+    ENDDO
+
+    PRINT *,"owned grid : ",Pt_gg%grids%size     
+    DO i=1,Pt_gg%grids%size
+      CALL grid__print(Pt_gg%grids%at(i)%pt)
+    ENDDO
+    PRINT *,"------------"
+  
+  END SUBROUTINE grid_group__print
+     
+END MODULE mod_grid_group
Index: /vendors/XMLIO_SERVER/current/src/XMLIO/mod_object.f90
===================================================================
--- /vendors/XMLIO_SERVER/current/src/XMLIO/mod_object.f90	(revision 1897)
+++ /vendors/XMLIO_SERVER/current/src/XMLIO/mod_object.f90	(revision 1897)
@@ -0,0 +1,14 @@
+MODULE mod_object
+
+  INTEGER,PARAMETER :: field_object=100
+  INTEGER,PARAMETER :: field_group_object=200
+  INTEGER,PARAMETER :: file_object=300
+  INTEGER,PARAMETER :: file_group_object=400
+  INTEGER,PARAMETER :: axis_object=500
+  INTEGER,PARAMETER :: axis_group_object=600
+  INTEGER,PARAMETER :: grid_object=700
+  INTEGER,PARAMETER :: grid_group_object=800
+  INTEGER,PARAMETER :: zoom_object=900
+  INTEGER,PARAMETER :: zoom_group_object=1000
+  
+END MODULE mod_object
Index: /vendors/XMLIO_SERVER/current/src/XMLIO/mod_parse_xml.f90
===================================================================
--- /vendors/XMLIO_SERVER/current/src/XMLIO/mod_parse_xml.f90	(revision 1897)
+++ /vendors/XMLIO_SERVER/current/src/XMLIO/mod_parse_xml.f90	(revision 1897)
@@ -0,0 +1,810 @@
+MODULE parsing_xml
+  USE flib_dom
+  USE error_msg
+  USE string_function
+  
+CONTAINS
+
+  SUBROUTINE parsing_xml_file(name)
+  IMPLICIT NONE
+    CHARACTER(len=*), INTENT(IN) :: name
+    TYPE(fnode), POINTER :: myDoc
+
+    myDoc => parsefile(name)
+    CALL parsing_root(myDoc)
+
+    PRINT *, 'Le parsing est termine !!! '
+  
+  END SUBROUTINE parsing_xml_file
+  
+ 
+  SUBROUTINE parsing_root(root)
+  IMPLICIT NONE
+    TYPE(fnode), POINTER :: root
+    TYPE(fnode), POINTER :: child_node
+    TYPE(fnodeList), POINTER :: child_list
+
+    INTEGER :: il
+    CHARACTER(len=100) :: node_name
+     
+    IF (hasChildNodes(root)) THEN
+      child_list => getChildnodes(root)
+
+      DO il=0,getLength(child_list)-1
+        child_node => item(child_list,il)
+        node_name=getNodename(child_node)
+          
+        SELECT CASE (TRIM(node_name)) 
+          
+           CASE ('simulation') 
+             CALL parsing_simulation(child_node)
+
+           CASE DEFAULT
+             IF (is_bad_node(node_name)) THEN
+               WRITE(message,*) 'Unknown node <<',TRIM(node_name),'>> while parsing root'
+               CALL Warning("mod_parse_xml:parsing_root")
+             ENDIF
+        END SELECT
+      ENDDO
+    ENDIF
+             
+  END SUBROUTINE parsing_root
+
+  SUBROUTINE parsing_simulation(root)
+  IMPLICIT NONE
+    TYPE(fnode), POINTER :: root
+    TYPE(fnode), POINTER :: child_node
+    TYPE(fnodeList), POINTER :: child_list
+
+    INTEGER :: il
+    CHARACTER(len=100) :: node_name
+     
+     IF (hasChildNodes(root)) THEN
+      child_list => getChildnodes(root)
+
+      DO il=0,getLength(child_list)-1
+        child_node => item(child_list,il)
+        node_name=getNodename(child_node)
+          
+        SELECT CASE (TRIM(node_name)) 
+          
+           CASE ('context') 
+             CALL parsing_context(child_node)
+
+           CASE DEFAULT
+             IF (is_bad_node(node_name)) THEN
+               WRITE(message,*) 'Unknown node <<',TRIM(node_name),'>> while parsing simulation'
+               CALL Warning("mod_parse_xml:parsing_simulationt")
+             ENDIF
+         END SELECT
+       
+       ENDDO
+    ENDIF
+             
+  END SUBROUTINE parsing_simulation
+
+  SUBROUTINE parsing_context(node)
+  USE mod_context
+  USE mod_axis_definition
+  USE mod_grid_definition
+  USE mod_field_definition
+  USE mod_file_definition
+  IMPLICIT NONE  
+    TYPE(fnode), POINTER         :: node
+    
+    TYPE(fnode), POINTER     :: child_node
+    TYPE(fnodeList), POINTER :: child_list
+    TYPE(axis),POINTER       :: attribute
+    LOGICAL                  :: is_root
+    INTEGER :: il
+    CHARACTER(len=100) :: node_name
+    CHARACTER(len=100) :: value
+    
+    IF (is_attribute_exist(node,"id")) THEN
+      value=getAttribute(node,"id")
+      CALL context__create(TRIM(value))  
+      CALL context__swap(TRIM(value))
+    ENDIF
+    
+    IF (hasChildNodes(node)) THEN
+      child_list => getChildnodes(node)
+
+      DO il=0,getLength(child_list)-1
+        child_node => item(child_list,il)
+        node_name=getNodename(child_node)
+        
+        SELECT CASE (TRIM(node_name)) 
+          
+           CASE ('axis_definition') 
+             CALL parsing_axis_group(child_node,axis_definition,root=.TRUE.)
+               
+           CASE ('grid_definition')
+             CALL parsing_grid_group(child_node,grid_definition,root=.TRUE.)
+               
+           CASE ('field_definition')
+             CALL parsing_field_group(child_node,field_definition,root=.TRUE.)
+               
+           CASE ('file_definition')
+             CALL parsing_file_group(child_node,file_definition,root=.TRUE.)
+               
+           CASE DEFAULT
+             IF (is_bad_node(node_name)) THEN
+               WRITE(message,*) 'Unknown node <<',TRIM(node_name),'>> while parsing context'
+               CALL Warning("mod_parse_xml:parsing_context")
+             ENDIF   
+        END SELECT
+      ENDDO
+
+    ENDIF
+
+  END SUBROUTINE parsing_context
+
+
+  RECURSIVE SUBROUTINE parsing_axis_group(node,parent,root)
+  USE mod_axis_definition
+  USE mod_axis_group
+  USE mod_axis
+  IMPLICIT NONE  
+    TYPE(fnode), POINTER         :: node
+    TYPE(axis_group),POINTER     :: parent
+    LOGICAL,INTENT(IN),OPTIONAL :: root
+    
+    TYPE(axis_group),POINTER :: pt_axis_group
+    TYPE(fnode), POINTER     :: child_node
+    TYPE(fnodeList), POINTER :: child_list
+    TYPE(axis),POINTER       :: attribute
+    LOGICAL                  :: is_root
+    INTEGER :: il
+    CHARACTER(len=100) :: node_name
+    CHARACTER(len=100) :: value
+    
+    is_root=.FALSE.
+    IF (PRESENT(root)) is_root=root
+  
+    IF (is_root) THEN
+      pt_axis_group=>parent
+    ELSE  
+      IF (is_attribute_exist(node,"id")) THEN
+        value=getAttribute(node,"id")
+        CALL axis_group__get_new_group(parent,pt_axis_group,TRIM(value))
+      ELSE
+        CALL axis_group__get_new_group(parent,pt_axis_group)
+      ENDIF
+    ENDIF
+      
+    CALL axis_group__get_default_attrib(pt_axis_group,attribute)
+    CALL parsing_axis_attribute(node,attribute)
+    
+    IF (hasChildNodes(node)) THEN
+      child_list => getChildnodes(node)
+
+      DO il=0,getLength(child_list)-1
+        child_node => item(child_list,il)
+        node_name=getNodename(child_node)
+        
+        SELECT CASE (TRIM(node_name)) 
+        
+          CASE ('group') 
+            CALL parsing_axis_group(child_node,pt_axis_group)
+             
+          CASE ('axis')
+            CALL parsing_axis(child_node,pt_axis_group)
+
+          CASE DEFAULT
+            IF (is_bad_node(node_name)) THEN
+              WRITE(message,*) 'Unknown node <<',TRIM(node_name),'>> while parsing group_axis'
+              CALL Warning("mod_parse_xml:parsing_group_axis")
+            ENDIF
+        END SELECT
+      ENDDO
+    ENDIF
+
+  END SUBROUTINE parsing_axis_group
+
+  SUBROUTINE parsing_axis(node,parent)
+  USE mod_axis_group
+  USE mod_axis
+  IMPLICIT NONE  
+    TYPE(fnode), POINTER     :: node
+    TYPE(axis_group),POINTER :: parent
+    
+    TYPE(axis),POINTER :: pt_axis
+    TYPE(axis),POINTER       :: attribute
+    INTEGER :: il
+    CHARACTER(len=100) :: node_name
+    CHARACTER(len=100) :: value
+  
+      
+    IF (is_attribute_exist(node,"id")) THEN
+      value=getAttribute(node,"id")
+      CALL axis_group__get_new_axis(parent,pt_axis,TRIM(value))
+    ELSE
+      CALL axis_group__get_new_axis(parent,pt_axis)
+    ENDIF
+      
+    CALL parsing_axis_attribute(node,pt_axis)
+  
+  END SUBROUTINE parsing_axis
+
+  
+  SUBROUTINE parsing_axis_attribute(node,pt_axis)
+  USE mod_axis
+  IMPLICIT NONE
+    TYPE(fnode), POINTER     :: node
+    TYPE(axis),POINTER :: pt_axis
+
+    CHARACTER(len=100) :: value
+   
+    IF (is_attribute_exist(node,"name")) THEN
+      value =  getAttribute(node,"name")
+      CALL axis__set(pt_axis,name=TRIM(value))
+    ENDIF
+
+    IF (is_attribute_exist(node,"description")) THEN
+      value =  getAttribute(node,"description")
+      CALL axis__set(pt_axis,description=TRIM(value))
+    ENDIF
+        
+    IF (is_attribute_exist(node,"unit")) THEN
+      value =  getAttribute(node,"unit")
+      CALL axis__set(pt_axis,unit=TRIM(value))
+    ENDIF
+
+    IF (is_attribute_exist(node,"size")) THEN
+      value =  getAttribute(node,"size")
+      CALL axis__set(pt_axis,a_size=string_to_integer(value))
+    ENDIF
+
+    IF (is_attribute_exist(node,"positive")) THEN
+      value =  getAttribute(node,"positive")
+      CALL axis__set(pt_axis,positive=string_to_logical(value))
+    ENDIF
+   
+  END SUBROUTINE parsing_axis_attribute 
+
+
+
+
+
+
+
+
+  RECURSIVE SUBROUTINE parsing_grid_group(node,parent,root)
+  USE mod_grid_definition
+  USE mod_grid_group
+  USE mod_grid
+  IMPLICIT NONE  
+    TYPE(fnode), POINTER     :: node
+    TYPE(grid_group),POINTER :: parent
+    LOGICAL,INTENT(IN),OPTIONAL :: root
+
+    TYPE(grid_group),POINTER :: pt_grid_group
+    TYPE(fnode), POINTER     :: child_node
+    TYPE(fnodeList), POINTER :: child_list
+    TYPE(grid),POINTER       :: attribute
+    LOGICAL                  :: is_root
+    INTEGER :: il
+    CHARACTER(len=100) :: node_name
+    CHARACTER(len=100) :: value
+  
+    is_root=.FALSE.
+    IF (PRESENT(root)) is_root=root
+  
+    IF (is_root) THEN
+      pt_grid_group=>parent
+    ELSE  
+      IF (is_attribute_exist(node,"id")) THEN
+        value=getAttribute(node,"id")
+        CALL grid_group__get_new_group(parent,pt_grid_group,TRIM(value))
+      ELSE
+        CALL grid_group__get_new_group(parent,pt_grid_group)
+      ENDIF
+    ENDIF
+      
+    CALL grid_group__get_default_attrib(pt_grid_group,attribute)
+    CALL parsing_grid_attribute(node,attribute)
+    
+    IF (hasChildNodes(node)) THEN
+      child_list => getChildnodes(node)
+
+      DO il=0,getLength(child_list)-1
+        child_node => item(child_list,il)
+        node_name=getNodename(child_node)
+        
+        SELECT CASE (TRIM(node_name)) 
+        
+          CASE ('group') 
+            CALL parsing_grid_group(child_node,pt_grid_group)
+             
+          CASE ('grid')
+            CALL parsing_grid(child_node,pt_grid_group)
+
+          CASE DEFAULT
+            IF (is_bad_node(node_name)) THEN
+              WRITE(message,*) 'Unknown node <<',TRIM(node_name),'>> while parsing group_grid'
+              CALL Warning("mod_parse_xml:parsing_group_grid")
+            ENDIF
+        END SELECT
+      ENDDO
+    ENDIF
+
+  END SUBROUTINE parsing_grid_group
+
+  SUBROUTINE parsing_grid(node,parent)
+  USE mod_grid_group
+  USE mod_grid
+  IMPLICIT NONE  
+    TYPE(fnode), POINTER     :: node
+    TYPE(grid_group),POINTER :: parent
+    
+    TYPE(grid),POINTER       :: pt_grid
+    TYPE(fnode), POINTER     :: child_node
+    TYPE(fnodeList), POINTER :: child_list
+    INTEGER :: il
+    CHARACTER(len=100) :: node_name
+    CHARACTER(len=100) :: value
+  
+      
+    IF (is_attribute_exist(node,"id")) THEN
+      value=getAttribute(node,"id")
+      CALL grid_group__get_new_grid(parent,pt_grid,TRIM(value))
+    ELSE
+      CALL grid_group__get_new_grid(parent,pt_grid)
+    ENDIF
+      
+    CALL parsing_grid_attribute(node,pt_grid)
+    
+
+   IF (hasChildNodes(node)) THEN
+      child_list => getChildnodes(node)
+
+      DO il=0,getLength(child_list)-1
+        child_node => item(child_list,il)
+        node_name=getNodename(child_node)
+        
+        SELECT CASE (TRIM(node_name)) 
+        
+          CASE ('zoom') 
+            CALL parsing_zoom(child_node,pt_grid)
+             
+          CASE DEFAULT
+            IF (is_bad_node(node_name)) THEN
+              WRITE(message,*) 'Unknown node <<',TRIM(node_name),'>> while parsing grid'
+              CALL Warning("mod_parse_xml:parsing_grid")
+            ENDIF
+        END SELECT
+      ENDDO
+    ENDIF
+  
+  END SUBROUTINE parsing_grid
+
+  SUBROUTINE parsing_grid_attribute(node,pt_grid)
+  USE mod_grid
+  IMPLICIT NONE
+    TYPE(fnode), POINTER     :: node
+    TYPE(grid),POINTER :: pt_grid
+
+    CHARACTER(len=100) :: value
+   
+    IF (is_attribute_exist(node,"name")) THEN
+      value =  getAttribute(node,"name")
+      CALL grid__set(pt_grid,name=TRIM(value))
+    ENDIF
+
+    IF (is_attribute_exist(node,"description")) THEN
+      value =  getAttribute(node,"description")
+      CALL grid__set(pt_grid,description=TRIM(value))
+    ENDIF
+        
+  END SUBROUTINE parsing_grid_attribute 
+
+  SUBROUTINE parsing_zoom(node,parent)
+  USE mod_zoom
+  USE mod_grid 
+  IMPLICIT NONE  
+    TYPE(fnode), POINTER     :: node
+    TYPE(grid),POINTER       :: parent
+    
+    TYPE(zoom),POINTER       :: pt_zoom
+    INTEGER :: il
+    CHARACTER(len=100) :: node_name
+    CHARACTER(len=100) :: value
+  
+      
+    IF (is_attribute_exist(node,"id")) THEN
+      value=getAttribute(node,"id")
+      CALL grid__get_new_zoom(parent,pt_zoom,TRIM(value))
+    ELSE
+      CALL grid__get_new_zoom(parent,pt_zoom)
+    ENDIF
+      
+    CALL parsing_zoom_attribute(node,pt_zoom)
+    
+  END SUBROUTINE parsing_zoom
+
+
+  SUBROUTINE parsing_zoom_attribute(node,pt_zoom)
+  USE mod_zoom
+  IMPLICIT NONE
+    TYPE(fnode), POINTER     :: node
+    TYPE(zoom),POINTER       :: pt_zoom
+
+    CHARACTER(len=100) :: value
+   
+    IF (is_attribute_exist(node,"name")) THEN
+      value =  getAttribute(node,"name")
+      CALL zoom__set(pt_zoom,name=TRIM(value))
+    ENDIF
+
+    IF (is_attribute_exist(node,"description")) THEN
+      value =  getAttribute(node,"description")
+      CALL zoom__set(pt_zoom,description=TRIM(value))
+    ENDIF
+
+    IF (is_attribute_exist(node,"ni")) THEN
+      value =  getAttribute(node,"ni")
+      CALL zoom__set(pt_zoom,ni_glo=string_to_integer(value))
+    ENDIF
+
+    IF (is_attribute_exist(node,"nj")) THEN
+      value =  getAttribute(node,"nj")
+      CALL zoom__set(pt_zoom,nj_glo=string_to_integer(value))
+    ENDIF
+
+    IF (is_attribute_exist(node,"ibegin")) THEN
+      value =  getAttribute(node,"ibegin")
+      CALL zoom__set(pt_zoom,ibegin_glo=string_to_integer(value))
+    ENDIF
+
+    IF (is_attribute_exist(node,"jbegin")) THEN
+      value =  getAttribute(node,"jbegin")
+      CALL zoom__set(pt_zoom,jbegin_glo=string_to_integer(value))
+    ENDIF
+        
+  END SUBROUTINE parsing_zoom_attribute 
+
+
+
+  RECURSIVE SUBROUTINE parsing_field_group(node,parent,root)
+  USE mod_field_definition
+  USE mod_field_group
+  USE mod_field
+  IMPLICIT NONE  
+    TYPE(fnode), POINTER          :: node
+    TYPE(field_group),POINTER     :: parent
+    LOGICAL,INTENT(IN),OPTIONAL   :: root
+    
+    TYPE(field_group),POINTER :: pt_field_group
+    TYPE(fnode), POINTER     :: child_node
+    TYPE(fnodeList), POINTER :: child_list
+    TYPE(field),POINTER       :: attribute
+    INTEGER :: il
+    CHARACTER(len=100) :: node_name
+    CHARACTER(len=100) :: value
+    LOGICAL            :: is_root
+    
+    is_root=.FALSE.
+    IF (PRESENT(root)) is_root=root
+    
+    IF (is_root) THEN
+      pt_field_group=>parent
+    ELSE  
+      IF (is_attribute_exist(node,"id")) THEN
+        value=getAttribute(node,"id")
+        CALL field_group__get_new_group(parent,pt_field_group,TRIM(value))
+      ELSE
+        CALL field_group__get_new_group(parent,pt_field_group)
+      ENDIF
+    ENDIF
+      
+    CALL field_group__get_default_attrib(pt_field_group,attribute)
+    CALL parsing_field_attribute(node,attribute)
+    
+    IF (hasChildNodes(node)) THEN
+      child_list => getChildnodes(node)
+
+      DO il=0,getLength(child_list)-1
+        child_node => item(child_list,il)
+        node_name=getNodename(child_node)
+        
+        SELECT CASE (TRIM(node_name)) 
+        
+          CASE ('group') 
+            CALL parsing_field_group(child_node,pt_field_group)
+             
+          CASE ('field')
+            CALL parsing_field(child_node,pt_field_group)
+
+          CASE DEFAULT
+            IF (is_bad_node(node_name)) THEN
+              WRITE(message,*) 'Unknown node <<',TRIM(node_name),'>> while parsing group_field'
+              CALL Warning("mod_parse_xml:parsing_group_field")
+            ENDIF
+        END SELECT
+      ENDDO
+    ENDIF
+
+  END SUBROUTINE parsing_field_group
+
+  SUBROUTINE parsing_field(node,parent)
+  USE mod_field_group
+  USE mod_field
+  IMPLICIT NONE  
+    TYPE(fnode), POINTER     :: node
+    TYPE(field_group),POINTER :: parent
+    
+    TYPE(field),POINTER :: pt_field
+    TYPE(field),POINTER       :: attribute
+    INTEGER :: il
+    CHARACTER(len=100) :: node_name
+    CHARACTER(len=100) :: value
+  
+      
+    IF (is_attribute_exist(node,"id")) THEN
+      value=getAttribute(node,"id")
+      CALL field_group__get_new_field(parent,pt_field,TRIM(value))
+    ELSE
+      CALL field_group__get_new_field(parent,pt_field)
+    ENDIF
+      
+    CALL parsing_field_attribute(node,pt_field)
+  
+  END SUBROUTINE parsing_field
+
+  
+  SUBROUTINE parsing_field_attribute(node,pt_field)
+  USE mod_field
+  IMPLICIT NONE
+    TYPE(fnode), POINTER     :: node
+    TYPE(field),POINTER :: pt_field
+
+    CHARACTER(len=100) :: value
+   
+    IF (is_attribute_exist(node,"name")) THEN
+      value =  getAttribute(node,"name")
+      CALL field__set(pt_field,name=TRIM(value))
+    ENDIF
+
+    IF (is_attribute_exist(node,"description")) THEN
+      value =  getAttribute(node,"description")
+      CALL field__set(pt_field,description=TRIM(value))
+    ENDIF
+        
+    IF (is_attribute_exist(node,"unit")) THEN
+      value =  getAttribute(node,"unit")
+      CALL field__set(pt_field,unit=TRIM(value))
+    ENDIF
+
+    IF (is_attribute_exist(node,"operation")) THEN
+      value =  getAttribute(node,"operation")
+      CALL field__set(pt_field,operation=TRIM(value))
+    ENDIF
+
+    IF (is_attribute_exist(node,"freq_op")) THEN
+      value =  getAttribute(node,"freq_op")
+      CALL field__set(pt_field,freq_op=string_to_integer(value))
+    ENDIF
+   
+    IF (is_attribute_exist(node,"axis_ref")) THEN
+      value =  getAttribute(node,"axis_ref")
+      CALL field__set(pt_field,axis_ref=TRIM(value))
+    ENDIF
+
+    IF (is_attribute_exist(node,"grid_ref")) THEN
+      value =  getAttribute(node,"grid_ref")
+      CALL field__set(pt_field,grid_ref=TRIM(value))
+    ENDIF
+
+    IF (is_attribute_exist(node,"zoom_ref")) THEN
+      value =  getAttribute(node,"zoom_ref")
+      CALL field__set(pt_field,zoom_ref=TRIM(value))
+    ENDIF
+
+    IF (is_attribute_exist(node,"level")) THEN
+      value =  getAttribute(node,"level")
+      CALL field__set(pt_field,level=string_to_integer(value))
+    ENDIF
+    
+    IF (is_attribute_exist(node,"prec")) THEN
+      value =  getAttribute(node,"prec")
+      CALL field__set(pt_field,prec=string_to_integer(value))
+    ENDIF
+
+    IF (is_attribute_exist(node,"ref")) THEN
+      value =  getAttribute(node,"ref")
+      CALL field__set(pt_field,ref=TRIM(value))
+    ENDIF
+
+    IF (is_attribute_exist(node,"enabled")) THEN
+      value =  getAttribute(node,"enabled")
+      CALL field__set(pt_field,enabled=string_to_logical(value))
+    ENDIF
+  
+
+  END SUBROUTINE parsing_field_attribute 
+
+
+  RECURSIVE SUBROUTINE parsing_file_group(node,parent,root)
+  USE mod_file_definition
+  USE mod_file_group
+  USE mod_file
+  IMPLICIT NONE  
+    TYPE(fnode), POINTER          :: node
+    TYPE(file_group),POINTER      :: parent
+    LOGICAL,INTENT(IN),OPTIONAL   :: root
+
+    TYPE(file_group),POINTER :: pt_file_group
+    TYPE(fnode), POINTER     :: child_node
+    TYPE(fnodeList), POINTER :: child_list
+    TYPE(file),POINTER       :: attribute
+    LOGICAL                  :: is_root
+    INTEGER :: il
+    CHARACTER(len=100) :: node_name
+    CHARACTER(len=100) :: value
+    
+    is_root=.FALSE.
+    IF (PRESENT(root)) is_root=root
+  
+    IF (is_root) THEN
+      pt_file_group=>parent
+    ELSE  
+      IF (is_attribute_exist(node,"id")) THEN
+        value=getAttribute(node,"id")
+        CALL file_group__get_new_group(parent,pt_file_group,TRIM(value))
+      ELSE
+        CALL file_group__get_new_group(parent,pt_file_group)
+      ENDIF
+    ENDIF
+      
+    CALL file_group__get_default_attrib(pt_file_group,attribute)
+    CALL parsing_file_attribute(node,attribute)
+    
+    IF (hasChildNodes(node)) THEN
+      child_list => getChildnodes(node)
+
+      DO il=0,getLength(child_list)-1
+        child_node => item(child_list,il)
+        node_name=getNodename(child_node)
+        
+        SELECT CASE (TRIM(node_name)) 
+        
+          CASE ('group') 
+            CALL parsing_file_group(child_node,pt_file_group)
+             
+          CASE ('file')
+            CALL parsing_file(child_node,pt_file_group)
+
+          CASE DEFAULT
+            IF (is_bad_node(node_name)) THEN
+              WRITE(message,*) 'Unknown node <<',TRIM(node_name),'>> while parsing group_file'
+              CALL Warning("mod_parse_xml:parsing_group_file")
+            ENDIF
+        END SELECT
+      ENDDO
+    ENDIF
+
+  END SUBROUTINE parsing_file_group
+
+  SUBROUTINE parsing_file(node,parent)
+  USE mod_file_group
+  USE mod_file
+  IMPLICIT NONE  
+    TYPE(fnode), POINTER     :: node
+    TYPE(file_group),POINTER :: parent
+    
+    TYPE(file),POINTER :: pt_file
+    TYPE(file),POINTER       :: attribute
+    TYPE(fnode), POINTER     :: child_node
+    TYPE(fnodeList), POINTER :: child_list
+    INTEGER :: il
+    CHARACTER(len=100) :: node_name
+    CHARACTER(len=100) :: value
+  
+      
+    IF (is_attribute_exist(node,"id")) THEN
+      value=getAttribute(node,"id")
+      CALL file_group__get_new_file(parent,pt_file,TRIM(value))
+    ELSE
+      CALL file_group__get_new_file(parent,pt_file)
+    ENDIF
+      
+    CALL parsing_file_attribute(node,pt_file)
+  
+    IF (hasChildNodes(node)) THEN
+      child_list => getChildnodes(node)
+
+      DO il=0,getLength(child_list)-1
+        child_node => item(child_list,il)
+        node_name=getNodename(child_node)
+        
+        SELECT CASE (TRIM(node_name)) 
+        
+          CASE ('group') 
+            CALL parsing_field_group(child_node,pt_file%field_list)
+             
+          CASE ('field')
+            CALL parsing_field(child_node,pt_file%field_list)
+
+          CASE DEFAULT
+            IF (is_bad_node(node_name)) THEN
+              WRITE(message,*) 'Unknown node <<',TRIM(node_name),'>> while parsing group_file'
+              CALL Warning("mod_parse_xml:parsing_group_file")
+            ENDIF
+        END SELECT
+      ENDDO
+    ENDIF
+  END SUBROUTINE parsing_file
+
+  
+  SUBROUTINE parsing_file_attribute(node,pt_file)
+  USE mod_file
+  IMPLICIT NONE
+    TYPE(fnode), POINTER     :: node
+    TYPE(file),POINTER :: pt_file
+
+    CHARACTER(len=100) :: value
+   
+    IF (is_attribute_exist(node,"name")) THEN
+      value =  getAttribute(node,"name")
+      CALL file__set(pt_file,name=TRIM(value))
+    ENDIF
+
+    IF (is_attribute_exist(node,"name_suffix")) THEN
+      value =  getAttribute(node,"name_suffix")
+      CALL file__set(pt_file,name_suffix=TRIM(value))
+    ENDIF
+
+    IF (is_attribute_exist(node,"description")) THEN
+      value =  getAttribute(node,"description")
+      CALL file__set(pt_file,description=TRIM(value))
+    ENDIF
+        
+    IF (is_attribute_exist(node,"output_freq")) THEN
+      value =  getAttribute(node,"output_freq")
+      CALL file__set(pt_file,output_freq=string_to_integer(value))
+    ENDIF
+   
+    IF (is_attribute_exist(node,"output_level")) THEN
+      value =  getAttribute(node,"output_level")
+      CALL file__set(pt_file,output_level=string_to_integer(value))
+    ENDIF
+
+    IF (is_attribute_exist(node,"enabled")) THEN
+      value =  getAttribute(node,"enabled")
+      CALL file__set(pt_file,enabled=string_to_logical(value))
+    ENDIF
+
+  END SUBROUTINE parsing_file_attribute
+  
+
+   
+  
+  FUNCTION is_attribute_exist(node, name)
+
+    LOGICAL :: is_attribute_exist
+    TYPE(fnode), POINTER :: node
+    CHARACTER(len=*) :: name
+    CHARACTER(len=100) :: value
+
+    value=""
+    
+    is_attribute_exist= .false.
+    value=getAttribute(node, TRIM(name))
+    IF (value .NE. "") is_attribute_exist= .true.
+
+  END FUNCTION is_attribute_exist
+
+  FUNCTION is_bad_node(node_name)
+  IMPLICIT NONE
+    CHARACTER(len=*),INTENT(IN) :: node_name
+    LOGICAL                     :: is_bad_node
+    
+    IF (TRIM(node_name)=='#text' .OR. TRIM(node_name)=='#comment') THEN
+      is_bad_node=.FALSE.
+    ELSE
+      is_bad_node=.TRUE.
+    ENDIF
+      
+  END FUNCTION is_bad_node
+  
+END MODULE parsing_xml
Index: /vendors/XMLIO_SERVER/current/src/XMLIO/mod_sorted_list.f90
===================================================================
--- /vendors/XMLIO_SERVER/current/src/XMLIO/mod_sorted_list.f90	(revision 1897)
+++ /vendors/XMLIO_SERVER/current/src/XMLIO/mod_sorted_list.f90	(revision 1897)
@@ -0,0 +1,167 @@
+MODULE mod_sorted_list
+
+  PRIVATE
+  
+  TYPE node
+   INTEGER :: key
+   INTEGER :: value
+   LOGICAL :: has_value
+   TYPE(node),POINTER :: child1
+   TYPE(node),POINTER :: child2
+  END TYPE node
+
+TYPE, PUBLIC :: sorted_list
+  PRIVATE
+  TYPE(vector_node),POINTER :: tree => NULL()
+  TYPE(node),POINTER        :: first => NULL()
+  INTEGER :: size = 0
+  LOGICAL :: is_init=.FALSE.
+END TYPE sorted_list 
+
+  PUBLIC :: sorted_list__new, sorted_list__add, sorted_list__find, sorted_list__delete 
+INCLUDE 'vector_node_def.inc'
+
+CONTAINS
+
+INCLUDE 'vector_node_contains.inc'
+  
+  SUBROUTINE node__new(Pt_n)
+  IMPLICIT NONE
+    TYPE(node), POINTER :: Pt_n
+    
+    Pt_n%has_value=.FALSE.
+    Pt_n%child1=>NULL()
+    pt_n%child2=>NULL()
+  END SUBROUTINE node__new
+  
+  
+  SUBROUTINE sorted_list__new(Pt_sl)
+  IMPLICIT NONE
+    TYPE(sorted_list), POINTER :: Pt_sl
+    TYPE(node), POINTER :: Pt_n
+    
+    IF (Pt_sl%is_init) CALL sorted_list__delete(Pt_sl)
+    
+    ALLOCATE(Pt_sl%tree)
+    CALL vector_node__new(Pt_sl%tree)
+    CALL vector_node__get_new(Pt_sl%tree,Pt_n)
+    CALL node__new(Pt_n)  
+    Pt_sl%first=>Pt_n
+    Pt_sl%Size=0
+    Pt_sl%is_init=.TRUE.
+    
+  END SUBROUTINE  sorted_list__new
+  
+  SUBROUTINE sorted_list__delete(Pt_sl)
+  IMPLICIT NONE
+    TYPE(sorted_list), POINTER :: Pt_sl
+    TYPE(node), POINTER :: Pt_n
+
+    IF (Pt_sl%is_init) THEN
+      CALL vector_node__delete(Pt_sl%tree)
+      DEALLOCATE(Pt_sl%tree)
+      Pt_sl%is_init=.FALSE.
+    ENDIF
+   
+  END SUBROUTINE  sorted_list__delete
+
+   
+  SUBROUTINE sorted_list__Add(Pt_sl,key,value)
+  IMPLICIT NONE
+    TYPE(sorted_list), POINTER :: Pt_sl
+    INTEGER,INTENT(IN)  :: key
+    INTEGER,INTENT(IN)  :: value
+
+    LOGICAL               :: Out
+    TYPE(node), POINTER   :: current
+    TYPE(node), POINTER   :: new 
+    
+    
+    CALL vector_node__get_new(Pt_sl%tree,new)
+    CALL node__new(new)
+    current=>Pt_sl%first
+    
+      
+    Out=.FALSE.
+    
+    DO WHILE (.NOT. out)
+      IF (current%has_value) THEN
+        IF (key > current%key) THEN
+          IF (ASSOCIATED(current%child2)) THEN
+            current=>current%child2
+          ELSE
+            current%child2=>new
+            out=.FALSE.
+          ENDIF
+        ELSE
+          IF (ASSOCIATED(current%child1)) THEN
+            current=>current%child1
+          ELSE
+            current%child1=>new
+            out=.FALSE.
+          ENDIF
+        ENDIF 
+      ELSE
+        current%has_value=.TRUE.
+        current%key=key
+        current%value=value
+        out=.TRUE.
+      ENDIF
+    ENDDO
+    
+    Pt_sl%Size=Pt_sl%Size+1
+       
+  END SUBROUTINE sorted_list__Add
+
+  
+  SUBROUTINE sorted_list__find(Pt_sl,key,value,success)
+  IMPLICIT NONE
+    TYPE(sorted_list),POINTER   :: Pt_sl
+    INTEGER,INTENT(IN)          :: key
+    INTEGER,INTENT(OUT)         :: value
+    LOGICAL,INTENT(OUT)         :: success
+    
+    LOGICAL               :: Out
+    TYPE(node), POINTER   :: current
+    
+    current=>Pt_sl%first
+    Out=.FALSE.
+    Success=.FALSE.
+    
+    DO WHILE (.NOT. out)
+      IF (current%has_value) THEN
+        IF (key == current%key) THEN
+          value=current%value
+          success=.TRUE.
+          out=.TRUE.
+        ELSE IF (key > current%key) THEN
+          IF (ASSOCIATED(current%child2)) THEN
+            current=>current%child2
+          ELSE
+            out=.TRUE.
+          ENDIF
+        ELSE
+          IF (ASSOCIATED(current%child1)) THEN
+            current=>current%child1
+          ELSE
+            out=.TRUE.
+          ENDIF
+        ENDIF
+      ELSE
+        out=.TRUE. 
+      ENDIF
+    ENDDO
+
+  END SUBROUTINE sorted_list__find
+
+  
+  SUBROUTINE sorted_list__get_first(Pt_sl,Pt_n)
+  IMPLICIT NONE
+    TYPE(sorted_list),POINTER   :: Pt_sl
+    TYPE(node),POINTER          :: Pt_n
+
+    Pt_n=>Pt_sl%tree%at(1)%Pt
+  END SUBROUTINE sorted_list__get_first  
+
+
+END MODULE mod_sorted_list
Index: /vendors/XMLIO_SERVER/current/src/XMLIO/mod_stdtype.f90
===================================================================
--- /vendors/XMLIO_SERVER/current/src/XMLIO/mod_stdtype.f90	(revision 1897)
+++ /vendors/XMLIO_SERVER/current/src/XMLIO/mod_stdtype.f90	(revision 1897)
@@ -0,0 +1,48 @@
+MODULE mod_stdtype
+
+  INTEGER,PARAMETER :: integer0 = 0
+  INTEGER,PARAMETER :: integer1 = 1
+  INTEGER,PARAMETER :: integer2 = 2
+  INTEGER,PARAMETER :: integer3 = 3
+  INTEGER,PARAMETER :: integer4 = 4
+  INTEGER,PARAMETER :: integer5 = 5
+  INTEGER,PARAMETER :: integer6 = 6
+  INTEGER,PARAMETER :: integer7 = 7
+  
+  INTEGER,PARAMETER :: real0    = 8
+  INTEGER,PARAMETER :: real1    = 9
+  INTEGER,PARAMETER :: real2    = 10
+  INTEGER,PARAMETER :: real3    = 11
+  INTEGER,PARAMETER :: real4    = 12
+  INTEGER,PARAMETER :: real5    = 13
+  INTEGER,PARAMETER :: real6    = 14
+  INTEGER,PARAMETER :: real7    = 15
+
+  INTEGER,PARAMETER :: logical0 = 16
+  INTEGER,PARAMETER :: logical1 = 17
+  INTEGER,PARAMETER :: logical2 = 18
+  INTEGER,PARAMETER :: logical3 = 19
+  INTEGER,PARAMETER :: logical4 = 20
+  INTEGER,PARAMETER :: logical5 = 21
+  INTEGER,PARAMETER :: logical6 = 22
+  INTEGER,PARAMETER :: logical7 = 23
+  
+  INTEGER,PARAMETER :: string0  = 24
+  INTEGER,PARAMETER :: string1  = 25
+  INTEGER,PARAMETER :: string2  = 26
+  INTEGER,PARAMETER :: string3  = 27
+  INTEGER,PARAMETER :: string4  = 28
+  INTEGER,PARAMETER :: string5  = 29
+  INTEGER,PARAMETER :: string6  = 30
+  INTEGER,PARAMETER :: string7  = 31
+
+  INTEGER,PARAMETER :: char0   = 32
+  INTEGER,PARAMETER :: char1   = 33
+  INTEGER,PARAMETER :: char2   = 34
+  INTEGER,PARAMETER :: char3   = 35
+  INTEGER,PARAMETER :: char4   = 36
+  INTEGER,PARAMETER :: char5   = 37
+  INTEGER,PARAMETER :: char6   = 38
+  INTEGER,PARAMETER :: char7   = 39
+ 
+END MODULE mod_stdtype
Index: /vendors/XMLIO_SERVER/current/src/XMLIO/mod_time_parameters.f90
===================================================================
--- /vendors/XMLIO_SERVER/current/src/XMLIO/mod_time_parameters.f90	(revision 1897)
+++ /vendors/XMLIO_SERVER/current/src/XMLIO/mod_time_parameters.f90	(revision 1897)
@@ -0,0 +1,26 @@
+MODULE mod_time_parameters
+
+  INTEGER,POINTER  :: initial_timestep
+  REAL,POINTER     :: initial_date
+  REAL,POINTER     :: timestep_value 
+  INTEGER,POINTER  :: timestep_number
+
+CONTAINS 
+
+  SUBROUTINE time_parameters__swap_context(saved_initial_timestep,saved_initial_date, &
+                                           saved_timestep_value,saved_timestep_number)
+  IMPLICIT NONE
+    INTEGER,POINTER  :: saved_initial_timestep
+    REAL,POINTER     :: saved_initial_date
+    REAL,POINTER     :: saved_timestep_value 
+    INTEGER,POINTER  :: saved_timestep_number
+   
+    initial_timestep => saved_initial_timestep
+    initial_date     => saved_initial_date
+    timestep_value   => saved_timestep_value 
+    timestep_number  => saved_timestep_number    
+    
+  END SUBROUTINE time_parameters__swap_context  
+    
+                                           
+END MODULE mod_time_parameters
Index: /vendors/XMLIO_SERVER/current/src/XMLIO/mod_vector_field.F90.old
===================================================================
--- /vendors/XMLIO_SERVER/current/src/XMLIO/mod_vector_field.F90.old	(revision 1897)
+++ /vendors/XMLIO_SERVER/current/src/XMLIO/mod_vector_field.F90.old	(revision 1897)
@@ -0,0 +1,43 @@
+MODULE mod_field_vector
+  USE mod_field
+  
+  PRIVATE
+  
+   TYPE,PUBLIC :: field_vector
+     PRIVATE
+     TYPE(vector), POINTER :: list
+     TYPE(field),  POINTER :: default_attribut
+   END TYPE field_vector
+
+#define DATA_TYPE field
+#include "vectors_def.inc"
+
+  PUBLIC field_vector__new, field_vector__get_new
+
+CONTAINS
+
+#include "vectors_contains.inc"
+    
+  SUBROUTINE field_vector__new(Pt_vf)
+  IMPLICIT NONE
+    TYPE(field_vector),POINTER  :: Pt_vf
+    
+      CALL vector__new(Pt_vf%list)
+      CALL field__new(Pt_vf%default_attribut)
+  
+  END SUBROUTINE field_vector__new
+  
+
+  SUBROUTINE field_vector__get_new(Pt_vf,Pt_f_out,Id)
+  IMPLICIT NONE  
+    TYPE(field_vector),POINTER           :: Pt_vf
+    TYPE(field),POINTER                  :: Pt_f_out
+    CHARACTER(LEN=str_len),OPTIONAL      :: Id
+      
+      CALL vector__get_new(Pt_vf%list,Pt_f_out)
+      CALL field__new(Pt_f_out)
+   END SUBROUTINE field_vector__get_new
+   
+   
+END MODULE mod_field_vector
+  
Index: /vendors/XMLIO_SERVER/current/src/XMLIO/mod_xmlio_parameters.f90
===================================================================
--- /vendors/XMLIO_SERVER/current/src/XMLIO/mod_xmlio_parameters.f90	(revision 1897)
+++ /vendors/XMLIO_SERVER/current/src/XMLIO/mod_xmlio_parameters.f90	(revision 1897)
@@ -0,0 +1,14 @@
+MODULE mod_xmlio_parameters
+
+  INTEGER, PARAMETER :: str_len=100
+  INTEGER, PARAMETER :: array_size_unit=2
+  INTEGER, PARAMETER :: default_vector_size=100
+  REAL, PARAMETER    :: default_vector_grow_factor=1.5
+  INTEGER, PARAMETER :: str_msg_len=1024
+  
+  INTEGER,PARAMETER  :: internal_file=10
+  INTEGER,PARAMETER  :: internal_field=10
+  INTEGER,PARAMETER  :: internal_axis=10
+  INTEGER,PARAMETER  :: internal_grid=10
+  
+END MODULE mod_xmlio_parameters
Index: /vendors/XMLIO_SERVER/current/src/XMLIO/mod_zoom.f90
===================================================================
--- /vendors/XMLIO_SERVER/current/src/XMLIO/mod_zoom.f90	(revision 1897)
+++ /vendors/XMLIO_SERVER/current/src/XMLIO/mod_zoom.f90	(revision 1897)
@@ -0,0 +1,201 @@
+MODULE mod_zoom
+  USE mod_xmlio_parameters
+  USE mod_sorted_list
+
+  IMPLICIT NONE
+
+  TYPE,PUBLIC :: zoom
+    CHARACTER(len=str_len)      :: id
+    LOGICAL                     :: has_id
+    CHARACTER(len=str_len)      :: name
+    LOGICAL                     :: has_name
+    CHARACTER(len=str_len)      :: description
+    LOGICAL                     :: has_description
+    INTEGER                     :: ni_glo
+    LOGICAL                     :: has_ni_glo
+    INTEGER                     :: nj_glo
+    LOGICAL                     :: has_nj_glo
+    INTEGER                     :: ibegin_glo
+    LOGICAL                     :: has_ibegin_glo
+    INTEGER                     :: jbegin_glo
+    LOGICAL                     :: has_jbegin_glo
+    INTEGER                     :: ni_loc
+    INTEGER                     :: nj_loc
+    INTEGER                     :: ibegin_loc
+    INTEGER                     :: jbegin_loc
+  END TYPE zoom    
+
+  INCLUDE 'vector_zoom_def.inc'
+
+  TYPE(vector_zoom),POINTER,SAVE             :: zoom_Ids
+  TYPE(sorted_list),POINTER,SAVE,PRIVATE     :: Ids 
+
+  INTERFACE zoom__set_attribut
+    MODULE PROCEDURE zoom__set_attribut_id,zoom__set_attribut_pt
+  END INTERFACE
+  
+CONTAINS
+  
+  INCLUDE 'vector_zoom_contains.inc'
+
+  SUBROUTINE zoom__swap_context(saved_zoom_Ids,saved_Ids)
+  IMPLICIT NONE
+    TYPE(vector_zoom),POINTER          :: saved_zoom_Ids
+    TYPE(sorted_list),POINTER          :: saved_Ids 
+    
+    zoom_ids=>saved_zoom_ids
+    ids=>saved_ids
+  END SUBROUTINE zoom__swap_context
+
+
+  SUBROUTINE zoom__init
+  IMPLICIT NONE
+
+    CALL vector_zoom__new(zoom_Ids)
+    CALL sorted_list__new(Ids)
+    
+  END SUBROUTINE zoom__init
+  
+
+  SUBROUTINE zoom__new(pt_zoom,Id)
+  USE string_function
+  IMPLICIT NONE
+    TYPE(zoom),POINTER :: pt_zoom
+    CHARACTER(LEN=*),OPTIONAL     :: Id
+    INTEGER   :: Pos 
+      
+    pt_zoom%has_id=.FALSE.
+    pt_zoom%has_name=.FALSE.
+    pt_zoom%has_description=.FALSE.
+    pt_zoom%has_ni_glo=.FALSE.
+    pt_zoom%has_nj_glo=.FALSE.
+    pt_zoom%has_ibegin_glo=.FALSE.
+    pt_zoom%has_jbegin_glo=.FALSE.
+     
+    IF (PRESENT(Id)) THEN
+      Pt_zoom%id=TRIM(ADJUSTL(Id))
+      Pt_zoom%has_id=.TRUE.
+     CALL vector_zoom__set_new(zoom_Ids,Pt_zoom,Pos)
+     CALL sorted_list__Add(Ids,hash(id),Pos)
+    ENDIF
+   
+  END SUBROUTINE zoom__new
+   
+  SUBROUTINE zoom__set(pt_zoom,name,description,ni_glo,nj_glo,ibegin_glo,jbegin_glo)
+  IMPLICIT NONE
+    TYPE(zoom),POINTER                   :: pt_zoom
+    CHARACTER(len=*),OPTIONAL            :: name
+    CHARACTER(len=*),OPTIONAL            :: description
+    INTEGER,OPTIONAL                     :: ni_glo
+    INTEGER,OPTIONAL                     :: nj_glo
+    INTEGER,OPTIONAL                     :: ibegin_glo
+    INTEGER,OPTIONAL                     :: jbegin_glo
+    
+    IF (PRESENT(name)) THEN
+      pt_zoom%name=TRIM(ADJUSTL(name))
+      pt_zoom%has_name=.TRUE.
+    ENDIF
+    
+    IF (PRESENT(description)) THEN
+      pt_zoom%name=TRIM(ADJUSTL(description))
+      pt_zoom%has_description=.TRUE.
+    ENDIF
+    
+    IF (PRESENT(ni_glo)) THEN
+      pt_zoom%ni_glo=ni_glo
+      pt_zoom%has_ni_glo=.TRUE.
+    ENDIF
+
+    IF (PRESENT(nj_glo)) THEN
+      pt_zoom%nj_glo=nj_glo
+      pt_zoom%has_nj_glo=.TRUE.
+    ENDIF
+
+    IF (PRESENT(ibegin_glo)) THEN
+      pt_zoom%ibegin_glo=ibegin_glo
+      pt_zoom%has_ibegin_glo=.TRUE.
+    ENDIF
+    
+    IF (PRESENT(jbegin_glo)) THEN
+      pt_zoom%jbegin_glo=jbegin_glo
+      pt_zoom%has_ibegin_glo=.TRUE.
+    ENDIF
+               
+   END SUBROUTINE zoom__set   
+
+  SUBROUTINE zoom__set_attribut_id(id,attrib,ok)
+  USE mod_attribut
+  USE error_msg
+  IMPLICIT NONE
+    CHARACTER(LEN=*),INTENT(IN)   :: id
+    TYPE(attribut),INTENT(IN)     :: attrib
+    LOGICAL,OPTIONAL,INTENT(OUT)  :: ok
+    
+    TYPE(zoom),POINTER              :: Pt_zoom
+    INTEGER                         :: Pos
+    LOGICAL                         :: success
+    
+    CALL sorted_list__find(Ids,hash(Id),Pos,success)
+    IF (success) THEN
+      Pt_zoom=>zoom_ids%at(Pos)%Pt
+      CALL zoom__set_attribut_pt(Pt_zoom,attrib)
+      IF (PRESENT(OK)) OK=.TRUE.
+    ELSE
+      IF (.NOT.PRESENT(OK)) THEN
+        WRITE(message,*) 'zoom id :',id,'is undefined'
+        CALL error('mod_zoom::zoom__set_attribut')
+      ELSE
+        OK=.FALSE.
+      ENDIF
+    ENDIF  
+  
+  END SUBROUTINE zoom__set_attribut_id
+      
+  SUBROUTINE zoom__set_attribut_pt(Pt_zoom,attrib)
+  USE mod_attribut
+  USE mod_zoom_attribut
+  USE error_msg
+  IMPLICIT NONE
+    TYPE(zoom),POINTER        :: Pt_zoom
+    TYPE(attribut),INTENT(IN) :: attrib
+    
+    SELECT CASE(attrib%name)
+      CASE (zoom__name)
+        IF (attrib%type==string0) CALL  zoom__set(pt_zoom,name=attrib%string0_ptr) ; RETURN
+      CASE (zoom__description)
+        IF (attrib%type==string0) CALL  zoom__set(pt_zoom,description=attrib%string0_ptr) ; RETURN
+      CASE (zoom__ni)
+        IF (attrib%type==integer0) CALL  zoom__set(pt_zoom,ni_glo=attrib%integer0_ptr) ; RETURN
+      CASE (zoom__nj)
+        IF (attrib%type==integer0) CALL  zoom__set(pt_zoom,nj_glo=attrib%integer0_ptr) ; RETURN
+      CASE (zoom__ibegin)
+        IF (attrib%type==integer0) CALL  zoom__set(pt_zoom,ibegin_glo=attrib%integer0_ptr) ; RETURN
+      CASE (zoom__jbegin)
+        IF (attrib%type==integer0) CALL  zoom__set(pt_zoom,jbegin_glo=attrib%integer0_ptr) ; RETURN
+     END SELECT
+
+     WRITE(message,*) 'zoom attribut ',attrib%name,' : type :',attrib%type,   &
+                      ' : Attribute type is incompatible with the provided value'
+     CALL error('mod_zoom::zoom__set_attribut')
+    
+  END SUBROUTINE zoom__set_attribut_pt
+
+  SUBROUTINE zoom__get(Id,pt_zoom)
+  USE string_function
+  IMPLICIT NONE
+    CHARACTER(LEN=*),INTENT(IN)     :: Id
+    TYPE(zoom),POINTER              :: Pt_zoom
+
+    INTEGER                         :: Pos
+    LOGICAL                         :: success
+    
+    CALL sorted_list__find(Ids,hash(Id),Pos,success)
+    IF (success) THEN
+      Pt_zoom=>zoom_ids%at(Pos)%Pt
+    ELSE
+      Pt_zoom=>NULL()
+    ENDIF
+    
+  END SUBROUTINE zoom__get
+
+END MODULE mod_zoom
Index: /vendors/XMLIO_SERVER/current/src/XMLIO/mod_zoom_attribut.f90
===================================================================
--- /vendors/XMLIO_SERVER/current/src/XMLIO/mod_zoom_attribut.f90	(revision 1897)
+++ /vendors/XMLIO_SERVER/current/src/XMLIO/mod_zoom_attribut.f90	(revision 1897)
@@ -0,0 +1,17 @@
+MODULE mod_zoom_attribut
+  USE mod_object
+   
+  INTEGER,PARAMETER :: zoom__begin = zoom_object + 10
+
+  INTEGER,PARAMETER :: zoom__name = zoom_object + 11
+  INTEGER,PARAMETER :: zoom__description = zoom_object + 12
+  INTEGER,PARAMETER :: zoom__ni = zoom_object + 13
+  INTEGER,PARAMETER :: zoom__nj = zoom_object + 14
+  INTEGER,PARAMETER :: zoom__ibegin = zoom_object + 15
+  INTEGER,PARAMETER :: zoom__jbegin = zoom_object + 16
+  
+  INTEGER,PARAMETER :: zoom__end = zoom_object + 17
+
+END MODULE mod_zoom_attribut
+
+
Index: /vendors/XMLIO_SERVER/current/src/XMLIO/string_function.f90
===================================================================
--- /vendors/XMLIO_SERVER/current/src/XMLIO/string_function.f90	(revision 1897)
+++ /vendors/XMLIO_SERVER/current/src/XMLIO/string_function.f90	(revision 1897)
@@ -0,0 +1,107 @@
+MODULE string_function
+ 
+
+
+
+CONTAINS
+
+  FUNCTION stdstr(string)
+  USE mod_xmlio_parameters
+  IMPLICIT NONE
+    CHARACTER(LEN=*),INTENT(IN) :: string
+    CHARACTER(LEN=str_len) :: stdstr
+    
+    stdstr=string
+  END FUNCTION stdstr
+    
+  
+  FUNCTION Hash(Str)
+  IMPLICIT NONE  
+    CHARACTER(LEN=*),INTENT(IN) :: Str
+    CHARACTER(LEN=LEN(str)) :: new_str
+    INTEGER :: Hash
+    INTEGER :: c
+    INTEGER :: i
+    
+    new_str=ADJUSTL(ADJUSTR(Str))
+    
+    Hash=0
+    DO i=1,LEN_TRIM(new_Str)
+      c = IACHAR(new_Str(i:i))
+      Hash=c+ISHFT(Hash,6)+ISHFT(Hash,16)-Hash
+    ENDDO
+    
+  END FUNCTION Hash
+  
+  FUNCTION String_to_integer(str,succed)
+  USE error_msg
+  IMPLICIT NONE
+    CHARACTER(LEN=*),INTENT(IN) :: Str
+    LOGICAL,OPTIONAL            :: succed
+    
+    INTEGER :: String_to_integer
+    INTEGER :: ierr
+    
+    READ(Str,FMT=*,iostat=ierr) String_to_integer
+    
+    IF (PRESENT(succed)) succed=.TRUE.
+      
+    IF (ierr/=0) THEN
+      IF (PRESENT(succed)) THEN
+        succed=.FALSE.
+      ELSE 
+        WRITE (message,*) 'Error when attempting to convert string :<<',TRIM(str),'>> to integer'
+        CALL Error("string_function:string_to_integer")
+      ENDIF
+    ENDIF
+  END FUNCTION String_to_integer
+  
+  FUNCTION String_to_real(str,succed)
+  USE error_msg
+  IMPLICIT NONE
+    CHARACTER(LEN=*),INTENT(IN) :: Str
+    LOGICAL,OPTIONAL            :: succed
+    
+    REAL    :: String_to_real
+    INTEGER :: ierr
+    
+    READ(Str,FMT=*,iostat=ierr) String_to_real
+    
+    IF (PRESENT(succed)) succed=.TRUE.
+      
+    IF (ierr/=0) THEN
+      IF (PRESENT(succed)) THEN
+        succed=.FALSE.
+      ELSE 
+        WRITE (message,*) 'Error when attempting to convert string :<<',TRIM(str),'>> to real'
+        CALL Error("string_function:string_to_real")
+      ENDIF
+    ENDIF
+    
+  END FUNCTION String_to_real
+  
+  FUNCTION String_to_logical(str,succed)
+  USE error_msg
+  IMPLICIT NONE
+    CHARACTER(LEN=*),INTENT(IN) :: Str
+    LOGICAL,OPTIONAL            :: succed
+    
+    LOGICAL :: String_to_logical
+    INTEGER :: ierr
+    
+    READ(Str,FMT=*,iostat=ierr) String_to_logical
+    
+    IF (PRESENT(succed)) succed=.TRUE.
+      
+    IF (ierr/=0) THEN
+      IF (PRESENT(succed)) THEN
+        succed=.FALSE.
+      ELSE 
+        WRITE (message,*) 'Error when attempting to convert string :<<',TRIM(str),'>> to logical'
+        CALL Error("string_function:string_to_logical")
+      ENDIF
+    ENDIF
+    
+  END FUNCTION String_to_logical
+    
+END MODULE string_function
Index: /vendors/XMLIO_SERVER/current/src/XMLIO/test_xmlio.f90
===================================================================
--- /vendors/XMLIO_SERVER/current/src/XMLIO/test_xmlio.f90	(revision 1897)
+++ /vendors/XMLIO_SERVER/current/src/XMLIO/test_xmlio.f90	(revision 1897)
@@ -0,0 +1,85 @@
+PROGRAM test_xmlio
+  USE xmlio
+  USE mod_interface_ioipsl
+  IMPLICIT NONE
+  
+  TYPE(field),POINTER :: Pt_f
+  TYPE(field_group),POINTER :: Pt_fg
+  TYPE(file),POINTER :: Pt_file
+  TYPE(grid),POINTER :: pt_grid 
+  INTEGER,PARAMETER  :: ni=360
+  INTEGER,PARAMETER  :: nj=180
+  REAL,DIMENSION(ni,nj) :: lon
+  REAL,DIMENSION(ni,nj) :: lat
+  INTEGER               :: i,j
+  TYPE(axis),POINTER :: pt_axis 
+  
+  DO i=1,ni
+    DO j=1,nj
+      lon(i,j)=i
+      lat(i,j)=j
+    ENDDO
+  ENDDO  
+  
+  
+  
+  CALL xmlio__init("iodef.xml")
+
+  CALL grid__get("grid_T",pt_grid)
+  CALL domain__set(pt_grid%domain,0,ni,nj,1,1,lon,lat)
+
+  CALL grid__get("grid_U",pt_grid)
+  CALL domain__set(pt_grid%domain,0,ni,nj,1,1,lon,lat)
+
+  CALL grid__get("grid_V",pt_grid)
+  CALL domain__set(pt_grid%domain,0,ni,nj,1,1,lon,lat)
+
+  CALL grid__get("grid_W",pt_grid)
+  CALL domain__set(pt_grid%domain,0,ni,nj,1,1,lon,lat)
+  
+  CALL axis__get("deptht",pt_axis)
+  CALL axis__set(pt_axis,a_size=5,values=(/1.,2.,3.,4.,5./))
+
+  CALL axis__get("depthu",pt_axis)
+  CALL axis__set(pt_axis,a_size=5,values=(/1.,2.,3.,4.,5./))
+
+  CALL axis__get("depthv",pt_axis)
+  CALL axis__set(pt_axis,a_size=5,values=(/1.,2.,3.,4.,5./))
+
+  CALL axis__get("depthw",pt_axis)
+  CALL axis__set(pt_axis,a_size=5,values=(/1.,2.,3.,4.,5./))
+
+
+  CALL axis_group__apply_default(axis_definition)
+  CALL grid_group__apply_default(grid_definition)
+  CALL field_group__apply_default(field_definition)
+  CALL file_group__apply_default(file_definition)
+  
+  CALL field_group__solve_ref(field_definition)
+  CALL file_group__solve_field_ref(file_definition)
+
+  CALL file_group__check(file_definition)
+  CALL axis_group__check(axis_definition)
+
+!
+  CALL axis_group__print(axis_definition)
+  CALL grid_group__print(grid_definition)
+  CALL field_group__print(field_definition)
+  CALL file_group__print(file_definition)
+!  CALL field_group__get_new_field(field_definition,pt_f,"toto")
+!  CALL field__set(Pt_f,name="toto",unit="kg")
+!  CALL field_group__get_new_field(field_definition,pt_f,"tata")
+!  CALL field__set(Pt_f,name="tata",unit="kg")
+!  CALL field_group__get_new_field(field_definition,pt_f,"titi")
+!  CALL field__set(Pt_f,name="titi",unit="kg")
+!  CALL field_group__get_new_field(field_definition,pt_f,"xyz")
+!  CALL field__set(Pt_f,name="xyz",unit="kg")
+   CALL set_file_dependency
+   CALL set_field_enabled
+   CALL set_field_dependency
+   
+   CALL set_time_parameters(0,0.,3600.)
+   
+   CALL create_header
+   
+END PROGRAM test_xmlio
Index: /vendors/XMLIO_SERVER/current/src/XMLIO/vector_axis_contains.inc
===================================================================
--- /vendors/XMLIO_SERVER/current/src/XMLIO/vector_axis_contains.inc	(revision 1897)
+++ /vendors/XMLIO_SERVER/current/src/XMLIO/vector_axis_contains.inc	(revision 1897)
@@ -0,0 +1,89 @@
+
+  SUBROUTINE vector_axis__new(vect,vect_size)
+  use mod_xmlio_parameters
+  IMPLICIT NONE
+    TYPE(vector_axis), INTENT(INOUT) :: vect
+    INTEGER, OPTIONAL, INTENT(IN) :: vect_size
+     
+    IF (ASSOCIATED(vect%at)) CALL vector_axis__delete(vect)
+    
+    IF (PRESENT(vect_size)) THEN 
+      vect%size_max=MAX(1,vect_size)
+    ELSE
+      vect%size_max=default_vector_size
+    ENDIF
+    
+    ALLOCATE(vect%at(vect%size_max))
+    
+    vect%size=0
+    vect%grow_factor=default_vector_grow_factor
+    
+  END SUBROUTINE vector_axis__new
+  
+  SUBROUTINE vector_axis__delete(vect)
+  IMPLICIT NONE
+    TYPE(vector_axis), INTENT(IN OUT) :: vect
+    
+    INTEGER                             :: i
+    
+    DO i=1,vect%size
+      IF (vect%at(i)%owned) DEALLOCATE(vect%at(i)%Pt)
+! doit-on avoir une subroutine du genre : CALL axis__delete() ???
+    ENDDO 
+    
+    IF (ASSOCIATED(vect%at)) DEALLOCATE(vect%at)
+    vect%size_max=0
+    
+  END SUBROUTINE vector_axis__delete
+  
+  SUBROUTINE vector_axis__get_new(vect,pt_value,pos)
+  IMPLICIT NONE
+  
+    TYPE(vector_axis), INTENT(INOUT)   :: vect
+    TYPE(axis),POINTER                 :: pt_value
+    INTEGER,OPTIONAL,INTENT(OUT)         :: Pos
+    
+    IF (vect%size==vect%size_max) CALL vector_axis__increase(vect)
+    
+    vect%size=vect%size+1
+    ALLOCATE(vect%at(vect%size)%pt)
+    vect%at(vect%size)%owned=.TRUE.
+    pt_value=>vect%at(vect%size)%pt
+    IF (PRESENT(pos)) pos=vect%size
+    
+  END SUBROUTINE vector_axis__get_new
+
+  SUBROUTINE vector_axis__set_new(vect,pt_value,pos)
+  IMPLICIT NONE
+  
+    TYPE(vector_axis), INTENT(INOUT)   :: vect
+    TYPE(axis),POINTER                 :: pt_value
+    INTEGER,OPTIONAL,INTENT(OUT)         :: Pos
+    
+    IF (vect%size==vect%size_max) CALL vector_axis__increase(vect)
+    
+    vect%size=vect%size+1
+    vect%at(vect%size)%pt=>pt_value
+    vect%at(vect%size)%owned=.FALSE.
+    IF (PRESENT(pos)) pos=vect%size
+    
+  END SUBROUTINE vector_axis__set_new
+  
+  SUBROUTINE vector_axis__increase(vect)
+    TYPE(vector_axis), INTENT(INOUT) :: vect
+    TYPE (Pt_axis__), POINTER, DIMENSION(:) :: Pt_tmp
+    INTEGER :: new_size
+    INTEGER :: i
+    
+    vect%size_max=MAX(vect%size_max+1,INT(vect%size_max*vect%grow_factor))
+    ALLOCATE(Pt_tmp(vect%size_max))
+    
+    DO i=1,vect%size
+     Pt_tmp(i)%pt=>vect%at(i)%pt
+    ENDDO
+    
+    DEALLOCATE(vect%at)
+    vect%at=>Pt_tmp
+    
+  END SUBROUTINE vector_axis__increase 
+    
Index: /vendors/XMLIO_SERVER/current/src/XMLIO/vector_axis_def.inc
===================================================================
--- /vendors/XMLIO_SERVER/current/src/XMLIO/vector_axis_def.inc	(revision 1897)
+++ /vendors/XMLIO_SERVER/current/src/XMLIO/vector_axis_def.inc	(revision 1897)
@@ -0,0 +1,17 @@
+
+  TYPE Pt_axis__ 
+    TYPE (axis),POINTER :: Pt
+    LOGICAL               :: owned
+  END TYPE Pt_axis__
+
+  TYPE vector_axis
+  
+    TYPE (Pt_axis__), POINTER, DIMENSION(:) :: at => NULL()
+    INTEGER :: size
+    
+    INTEGER :: size_max
+    REAL    :: grow_factor
+    INTEGER :: chunk
+  
+  END TYPE vector_axis
+  
Index: /vendors/XMLIO_SERVER/current/src/XMLIO/vector_axis_group_contains.inc
===================================================================
--- /vendors/XMLIO_SERVER/current/src/XMLIO/vector_axis_group_contains.inc	(revision 1897)
+++ /vendors/XMLIO_SERVER/current/src/XMLIO/vector_axis_group_contains.inc	(revision 1897)
@@ -0,0 +1,89 @@
+
+  SUBROUTINE vector_axis_group__new(vect,vect_size)
+  use mod_xmlio_parameters
+  IMPLICIT NONE
+    TYPE(vector_axis_group), INTENT(INOUT) :: vect
+    INTEGER, OPTIONAL, INTENT(IN) :: vect_size
+     
+    IF (ASSOCIATED(vect%at)) CALL vector_axis_group__delete(vect)
+    
+    IF (PRESENT(vect_size)) THEN 
+      vect%size_max=MAX(1,vect_size)
+    ELSE
+      vect%size_max=default_vector_size
+    ENDIF
+    
+    ALLOCATE(vect%at(vect%size_max))
+    
+    vect%size=0
+    vect%grow_factor=default_vector_grow_factor
+    
+  END SUBROUTINE vector_axis_group__new
+  
+  SUBROUTINE vector_axis_group__delete(vect)
+  IMPLICIT NONE
+    TYPE(vector_axis_group), INTENT(IN OUT) :: vect
+    
+    INTEGER                             :: i
+    
+    DO i=1,vect%size
+      IF (vect%at(i)%owned) DEALLOCATE(vect%at(i)%Pt)
+! doit-on avoir une subroutine du genre : CALL axis_group__delete() ???
+    ENDDO 
+    
+    IF (ASSOCIATED(vect%at)) DEALLOCATE(vect%at)
+    vect%size_max=0
+    
+  END SUBROUTINE vector_axis_group__delete
+  
+  SUBROUTINE vector_axis_group__get_new(vect,pt_value,pos)
+  IMPLICIT NONE
+  
+    TYPE(vector_axis_group), INTENT(INOUT)   :: vect
+    TYPE(axis_group),POINTER                 :: pt_value
+    INTEGER,OPTIONAL,INTENT(OUT)         :: Pos
+    
+    IF (vect%size==vect%size_max) CALL vector_axis_group__increase(vect)
+    
+    vect%size=vect%size+1
+    ALLOCATE(vect%at(vect%size)%pt)
+    vect%at(vect%size)%owned=.TRUE.
+    pt_value=>vect%at(vect%size)%pt
+    IF (PRESENT(pos)) pos=vect%size
+    
+  END SUBROUTINE vector_axis_group__get_new
+
+  SUBROUTINE vector_axis_group__set_new(vect,pt_value,pos)
+  IMPLICIT NONE
+  
+    TYPE(vector_axis_group), INTENT(INOUT)   :: vect
+    TYPE(axis_group),POINTER                 :: pt_value
+    INTEGER,OPTIONAL,INTENT(OUT)         :: Pos
+    
+    IF (vect%size==vect%size_max) CALL vector_axis_group__increase(vect)
+    
+    vect%size=vect%size+1
+    vect%at(vect%size)%pt=>pt_value
+    vect%at(vect%size)%owned=.FALSE.
+    IF (PRESENT(pos)) pos=vect%size
+    
+  END SUBROUTINE vector_axis_group__set_new
+  
+  SUBROUTINE vector_axis_group__increase(vect)
+    TYPE(vector_axis_group), INTENT(INOUT) :: vect
+    TYPE (Pt_axis_group__), POINTER, DIMENSION(:) :: Pt_tmp
+    INTEGER :: new_size
+    INTEGER :: i
+    
+    vect%size_max=MAX(vect%size_max+1,INT(vect%size_max*vect%grow_factor))
+    ALLOCATE(Pt_tmp(vect%size_max))
+    
+    DO i=1,vect%size
+     Pt_tmp(i)%pt=>vect%at(i)%pt
+    ENDDO
+    
+    DEALLOCATE(vect%at)
+    vect%at=>Pt_tmp
+    
+  END SUBROUTINE vector_axis_group__increase 
+    
Index: /vendors/XMLIO_SERVER/current/src/XMLIO/vector_axis_group_def.inc
===================================================================
--- /vendors/XMLIO_SERVER/current/src/XMLIO/vector_axis_group_def.inc	(revision 1897)
+++ /vendors/XMLIO_SERVER/current/src/XMLIO/vector_axis_group_def.inc	(revision 1897)
@@ -0,0 +1,17 @@
+
+  TYPE Pt_axis_group__ 
+    TYPE (axis_group),POINTER :: Pt
+    LOGICAL               :: owned
+  END TYPE Pt_axis_group__
+
+  TYPE vector_axis_group
+  
+    TYPE (Pt_axis_group__), POINTER, DIMENSION(:) :: at => NULL()
+    INTEGER :: size
+    
+    INTEGER :: size_max
+    REAL    :: grow_factor
+    INTEGER :: chunk
+  
+  END TYPE vector_axis_group
+  
Index: /vendors/XMLIO_SERVER/current/src/XMLIO/vector_contains.template
===================================================================
--- /vendors/XMLIO_SERVER/current/src/XMLIO/vector_contains.template	(revision 1897)
+++ /vendors/XMLIO_SERVER/current/src/XMLIO/vector_contains.template	(revision 1897)
@@ -0,0 +1,89 @@
+
+  SUBROUTINE vector_#TYPE#__new(vect,vect_size)
+  use mod_xmlio_parameters
+  IMPLICIT NONE
+    TYPE(vector_#TYPE#), INTENT(INOUT) :: vect
+    INTEGER, OPTIONAL, INTENT(IN) :: vect_size
+     
+    IF (ASSOCIATED(vect%at)) CALL vector_#TYPE#__delete(vect)
+    
+    IF (PRESENT(vect_size)) THEN 
+      vect%size_max=MAX(1,vect_size)
+    ELSE
+      vect%size_max=default_vector_size
+    ENDIF
+    
+    ALLOCATE(vect%at(vect%size_max))
+    
+    vect%size=0
+    vect%grow_factor=default_vector_grow_factor
+    
+  END SUBROUTINE vector_#TYPE#__new
+  
+  SUBROUTINE vector_#TYPE#__delete(vect)
+  IMPLICIT NONE
+    TYPE(vector_#TYPE#), INTENT(IN OUT) :: vect
+    
+    INTEGER                             :: i
+    
+    DO i=1,vect%size
+      IF (vect%at(i)%owned) DEALLOCATE(vect%at(i)%Pt)
+! doit-on avoir une subroutine du genre : CALL #TYPE#__delete() ???
+    ENDDO 
+    
+    IF (ASSOCIATED(vect%at)) DEALLOCATE(vect%at)
+    vect%size_max=0
+    
+  END SUBROUTINE vector_#TYPE#__delete
+  
+  SUBROUTINE vector_#TYPE#__get_new(vect,pt_value,pos)
+  IMPLICIT NONE
+  
+    TYPE(vector_#TYPE#), INTENT(INOUT)   :: vect
+    TYPE(#TYPE#),POINTER                 :: pt_value
+    INTEGER,OPTIONAL,INTENT(OUT)         :: Pos
+    
+    IF (vect%size==vect%size_max) CALL vector_#TYPE#__increase(vect)
+    
+    vect%size=vect%size+1
+    ALLOCATE(vect%at(vect%size)%pt)
+    vect%at(vect%size)%owned=.TRUE.
+    pt_value=>vect%at(vect%size)%pt
+    IF (PRESENT(pos)) pos=vect%size
+    
+  END SUBROUTINE vector_#TYPE#__get_new
+
+  SUBROUTINE vector_#TYPE#__set_new(vect,pt_value,pos)
+  IMPLICIT NONE
+  
+    TYPE(vector_#TYPE#), INTENT(INOUT)   :: vect
+    TYPE(#TYPE#),POINTER                 :: pt_value
+    INTEGER,OPTIONAL,INTENT(OUT)         :: Pos
+    
+    IF (vect%size==vect%size_max) CALL vector_#TYPE#__increase(vect)
+    
+    vect%size=vect%size+1
+    vect%at(vect%size)%pt=>pt_value
+    vect%at(vect%size)%owned=.FALSE.
+    IF (PRESENT(pos)) pos=vect%size
+    
+  END SUBROUTINE vector_#TYPE#__set_new
+  
+  SUBROUTINE vector_#TYPE#__increase(vect)
+    TYPE(vector_#TYPE#), INTENT(INOUT) :: vect
+    TYPE (Pt_#TYPE#__), POINTER, DIMENSION(:) :: Pt_tmp
+    INTEGER :: new_size
+    INTEGER :: i
+    
+    vect%size_max=MAX(vect%size_max+1,INT(vect%size_max*vect%grow_factor))
+    ALLOCATE(Pt_tmp(vect%size_max))
+    
+    DO i=1,vect%size
+     Pt_tmp(i)%pt=>vect%at(i)%pt
+    ENDDO
+    
+    DEALLOCATE(vect%at)
+    vect%at=>Pt_tmp
+    
+  END SUBROUTINE vector_#TYPE#__increase 
+    
Index: /vendors/XMLIO_SERVER/current/src/XMLIO/vector_context_contains.inc
===================================================================
--- /vendors/XMLIO_SERVER/current/src/XMLIO/vector_context_contains.inc	(revision 1897)
+++ /vendors/XMLIO_SERVER/current/src/XMLIO/vector_context_contains.inc	(revision 1897)
@@ -0,0 +1,89 @@
+
+  SUBROUTINE vector_context__new(vect,vect_size)
+  use mod_xmlio_parameters
+  IMPLICIT NONE
+    TYPE(vector_context), INTENT(INOUT) :: vect
+    INTEGER, OPTIONAL, INTENT(IN) :: vect_size
+     
+    IF (ASSOCIATED(vect%at)) CALL vector_context__delete(vect)
+    
+    IF (PRESENT(vect_size)) THEN 
+      vect%size_max=MAX(1,vect_size)
+    ELSE
+      vect%size_max=default_vector_size
+    ENDIF
+    
+    ALLOCATE(vect%at(vect%size_max))
+    
+    vect%size=0
+    vect%grow_factor=default_vector_grow_factor
+    
+  END SUBROUTINE vector_context__new
+  
+  SUBROUTINE vector_context__delete(vect)
+  IMPLICIT NONE
+    TYPE(vector_context), INTENT(IN OUT) :: vect
+    
+    INTEGER                             :: i
+    
+    DO i=1,vect%size
+      IF (vect%at(i)%owned) DEALLOCATE(vect%at(i)%Pt)
+! doit-on avoir une subroutine du genre : CALL context__delete() ???
+    ENDDO 
+    
+    IF (ASSOCIATED(vect%at)) DEALLOCATE(vect%at)
+    vect%size_max=0
+    
+  END SUBROUTINE vector_context__delete
+  
+  SUBROUTINE vector_context__get_new(vect,pt_value,pos)
+  IMPLICIT NONE
+  
+    TYPE(vector_context), INTENT(INOUT)   :: vect
+    TYPE(context),POINTER                 :: pt_value
+    INTEGER,OPTIONAL,INTENT(OUT)         :: Pos
+    
+    IF (vect%size==vect%size_max) CALL vector_context__increase(vect)
+    
+    vect%size=vect%size+1
+    ALLOCATE(vect%at(vect%size)%pt)
+    vect%at(vect%size)%owned=.TRUE.
+    pt_value=>vect%at(vect%size)%pt
+    IF (PRESENT(pos)) pos=vect%size
+    
+  END SUBROUTINE vector_context__get_new
+
+  SUBROUTINE vector_context__set_new(vect,pt_value,pos)
+  IMPLICIT NONE
+  
+    TYPE(vector_context), INTENT(INOUT)   :: vect
+    TYPE(context),POINTER                 :: pt_value
+    INTEGER,OPTIONAL,INTENT(OUT)         :: Pos
+    
+    IF (vect%size==vect%size_max) CALL vector_context__increase(vect)
+    
+    vect%size=vect%size+1
+    vect%at(vect%size)%pt=>pt_value
+    vect%at(vect%size)%owned=.FALSE.
+    IF (PRESENT(pos)) pos=vect%size
+    
+  END SUBROUTINE vector_context__set_new
+  
+  SUBROUTINE vector_context__increase(vect)
+    TYPE(vector_context), INTENT(INOUT) :: vect
+    TYPE (Pt_context__), POINTER, DIMENSION(:) :: Pt_tmp
+    INTEGER :: new_size
+    INTEGER :: i
+    
+    vect%size_max=MAX(vect%size_max+1,INT(vect%size_max*vect%grow_factor))
+    ALLOCATE(Pt_tmp(vect%size_max))
+    
+    DO i=1,vect%size
+     Pt_tmp(i)%pt=>vect%at(i)%pt
+    ENDDO
+    
+    DEALLOCATE(vect%at)
+    vect%at=>Pt_tmp
+    
+  END SUBROUTINE vector_context__increase 
+    
Index: /vendors/XMLIO_SERVER/current/src/XMLIO/vector_context_def.inc
===================================================================
--- /vendors/XMLIO_SERVER/current/src/XMLIO/vector_context_def.inc	(revision 1897)
+++ /vendors/XMLIO_SERVER/current/src/XMLIO/vector_context_def.inc	(revision 1897)
@@ -0,0 +1,17 @@
+
+  TYPE Pt_context__ 
+    TYPE (context),POINTER :: Pt
+    LOGICAL               :: owned
+  END TYPE Pt_context__
+
+  TYPE vector_context
+  
+    TYPE (Pt_context__), POINTER, DIMENSION(:) :: at => NULL()
+    INTEGER :: size
+    
+    INTEGER :: size_max
+    REAL    :: grow_factor
+    INTEGER :: chunk
+  
+  END TYPE vector_context
+  
Index: /vendors/XMLIO_SERVER/current/src/XMLIO/vector_def.template
===================================================================
--- /vendors/XMLIO_SERVER/current/src/XMLIO/vector_def.template	(revision 1897)
+++ /vendors/XMLIO_SERVER/current/src/XMLIO/vector_def.template	(revision 1897)
@@ -0,0 +1,17 @@
+
+  TYPE Pt_#TYPE#__ 
+    TYPE (#TYPE#),POINTER :: Pt
+    LOGICAL               :: owned
+  END TYPE Pt_#TYPE#__
+
+  TYPE vector_#TYPE#
+  
+    TYPE (Pt_#TYPE#__), POINTER, DIMENSION(:) :: at => NULL()
+    INTEGER :: size
+    
+    INTEGER :: size_max
+    REAL    :: grow_factor
+    INTEGER :: chunk
+  
+  END TYPE vector_#TYPE#
+  
Index: /vendors/XMLIO_SERVER/current/src/XMLIO/vector_domain_contains.inc
===================================================================
--- /vendors/XMLIO_SERVER/current/src/XMLIO/vector_domain_contains.inc	(revision 1897)
+++ /vendors/XMLIO_SERVER/current/src/XMLIO/vector_domain_contains.inc	(revision 1897)
@@ -0,0 +1,89 @@
+
+  SUBROUTINE vector_domain__new(vect,vect_size)
+  use mod_xmlio_parameters
+  IMPLICIT NONE
+    TYPE(vector_domain), INTENT(INOUT) :: vect
+    INTEGER, OPTIONAL, INTENT(IN) :: vect_size
+     
+    IF (ASSOCIATED(vect%at)) CALL vector_domain__delete(vect)
+    
+    IF (PRESENT(vect_size)) THEN 
+      vect%size_max=MAX(1,vect_size)
+    ELSE
+      vect%size_max=default_vector_size
+    ENDIF
+    
+    ALLOCATE(vect%at(vect%size_max))
+    
+    vect%size=0
+    vect%grow_factor=default_vector_grow_factor
+    
+  END SUBROUTINE vector_domain__new
+  
+  SUBROUTINE vector_domain__delete(vect)
+  IMPLICIT NONE
+    TYPE(vector_domain), INTENT(IN OUT) :: vect
+    
+    INTEGER                             :: i
+    
+    DO i=1,vect%size
+      IF (vect%at(i)%owned) DEALLOCATE(vect%at(i)%Pt)
+! doit-on avoir une subroutine du genre : CALL domain__delete() ???
+    ENDDO 
+    
+    IF (ASSOCIATED(vect%at)) DEALLOCATE(vect%at)
+    vect%size_max=0
+    
+  END SUBROUTINE vector_domain__delete
+  
+  SUBROUTINE vector_domain__get_new(vect,pt_value,pos)
+  IMPLICIT NONE
+  
+    TYPE(vector_domain), INTENT(INOUT)   :: vect
+    TYPE(domain),POINTER                 :: pt_value
+    INTEGER,OPTIONAL,INTENT(OUT)         :: Pos
+    
+    IF (vect%size==vect%size_max) CALL vector_domain__increase(vect)
+    
+    vect%size=vect%size+1
+    ALLOCATE(vect%at(vect%size)%pt)
+    vect%at(vect%size)%owned=.TRUE.
+    pt_value=>vect%at(vect%size)%pt
+    IF (PRESENT(pos)) pos=vect%size
+    
+  END SUBROUTINE vector_domain__get_new
+
+  SUBROUTINE vector_domain__set_new(vect,pt_value,pos)
+  IMPLICIT NONE
+  
+    TYPE(vector_domain), INTENT(INOUT)   :: vect
+    TYPE(domain),POINTER                 :: pt_value
+    INTEGER,OPTIONAL,INTENT(OUT)         :: Pos
+    
+    IF (vect%size==vect%size_max) CALL vector_domain__increase(vect)
+    
+    vect%size=vect%size+1
+    vect%at(vect%size)%pt=>pt_value
+    vect%at(vect%size)%owned=.FALSE.
+    IF (PRESENT(pos)) pos=vect%size
+    
+  END SUBROUTINE vector_domain__set_new
+  
+  SUBROUTINE vector_domain__increase(vect)
+    TYPE(vector_domain), INTENT(INOUT) :: vect
+    TYPE (Pt_domain__), POINTER, DIMENSION(:) :: Pt_tmp
+    INTEGER :: new_size
+    INTEGER :: i
+    
+    vect%size_max=MAX(vect%size_max+1,INT(vect%size_max*vect%grow_factor))
+    ALLOCATE(Pt_tmp(vect%size_max))
+    
+    DO i=1,vect%size
+     Pt_tmp(i)%pt=>vect%at(i)%pt
+    ENDDO
+    
+    DEALLOCATE(vect%at)
+    vect%at=>Pt_tmp
+    
+  END SUBROUTINE vector_domain__increase 
+    
Index: /vendors/XMLIO_SERVER/current/src/XMLIO/vector_domain_def.inc
===================================================================
--- /vendors/XMLIO_SERVER/current/src/XMLIO/vector_domain_def.inc	(revision 1897)
+++ /vendors/XMLIO_SERVER/current/src/XMLIO/vector_domain_def.inc	(revision 1897)
@@ -0,0 +1,17 @@
+
+  TYPE Pt_domain__ 
+    TYPE (domain),POINTER :: Pt
+    LOGICAL               :: owned
+  END TYPE Pt_domain__
+
+  TYPE vector_domain
+  
+    TYPE (Pt_domain__), POINTER, DIMENSION(:) :: at => NULL()
+    INTEGER :: size
+    
+    INTEGER :: size_max
+    REAL    :: grow_factor
+    INTEGER :: chunk
+  
+  END TYPE vector_domain
+  
Index: /vendors/XMLIO_SERVER/current/src/XMLIO/vector_field_contains.inc
===================================================================
--- /vendors/XMLIO_SERVER/current/src/XMLIO/vector_field_contains.inc	(revision 1897)
+++ /vendors/XMLIO_SERVER/current/src/XMLIO/vector_field_contains.inc	(revision 1897)
@@ -0,0 +1,89 @@
+
+  SUBROUTINE vector_field__new(vect,vect_size)
+  use mod_xmlio_parameters
+  IMPLICIT NONE
+    TYPE(vector_field), INTENT(INOUT) :: vect
+    INTEGER, OPTIONAL, INTENT(IN) :: vect_size
+     
+    IF (ASSOCIATED(vect%at)) CALL vector_field__delete(vect)
+    
+    IF (PRESENT(vect_size)) THEN 
+      vect%size_max=MAX(1,vect_size)
+    ELSE
+      vect%size_max=default_vector_size
+    ENDIF
+    
+    ALLOCATE(vect%at(vect%size_max))
+    
+    vect%size=0
+    vect%grow_factor=default_vector_grow_factor
+    
+  END SUBROUTINE vector_field__new
+  
+  SUBROUTINE vector_field__delete(vect)
+  IMPLICIT NONE
+    TYPE(vector_field), INTENT(IN OUT) :: vect
+    
+    INTEGER                             :: i
+    
+    DO i=1,vect%size
+      IF (vect%at(i)%owned) DEALLOCATE(vect%at(i)%Pt)
+! doit-on avoir une subroutine du genre : CALL field__delete() ???
+    ENDDO 
+    
+    IF (ASSOCIATED(vect%at)) DEALLOCATE(vect%at)
+    vect%size_max=0
+    
+  END SUBROUTINE vector_field__delete
+  
+  SUBROUTINE vector_field__get_new(vect,pt_value,pos)
+  IMPLICIT NONE
+  
+    TYPE(vector_field), INTENT(INOUT)   :: vect
+    TYPE(field),POINTER                 :: pt_value
+    INTEGER,OPTIONAL,INTENT(OUT)         :: Pos
+    
+    IF (vect%size==vect%size_max) CALL vector_field__increase(vect)
+    
+    vect%size=vect%size+1
+    ALLOCATE(vect%at(vect%size)%pt)
+    vect%at(vect%size)%owned=.TRUE.
+    pt_value=>vect%at(vect%size)%pt
+    IF (PRESENT(pos)) pos=vect%size
+    
+  END SUBROUTINE vector_field__get_new
+
+  SUBROUTINE vector_field__set_new(vect,pt_value,pos)
+  IMPLICIT NONE
+  
+    TYPE(vector_field), INTENT(INOUT)   :: vect
+    TYPE(field),POINTER                 :: pt_value
+    INTEGER,OPTIONAL,INTENT(OUT)         :: Pos
+    
+    IF (vect%size==vect%size_max) CALL vector_field__increase(vect)
+    
+    vect%size=vect%size+1
+    vect%at(vect%size)%pt=>pt_value
+    vect%at(vect%size)%owned=.FALSE.
+    IF (PRESENT(pos)) pos=vect%size
+    
+  END SUBROUTINE vector_field__set_new
+  
+  SUBROUTINE vector_field__increase(vect)
+    TYPE(vector_field), INTENT(INOUT) :: vect
+    TYPE (Pt_field__), POINTER, DIMENSION(:) :: Pt_tmp
+    INTEGER :: new_size
+    INTEGER :: i
+    
+    vect%size_max=MAX(vect%size_max+1,INT(vect%size_max*vect%grow_factor))
+    ALLOCATE(Pt_tmp(vect%size_max))
+    
+    DO i=1,vect%size
+     Pt_tmp(i)%pt=>vect%at(i)%pt
+    ENDDO
+    
+    DEALLOCATE(vect%at)
+    vect%at=>Pt_tmp
+    
+  END SUBROUTINE vector_field__increase 
+    
Index: /vendors/XMLIO_SERVER/current/src/XMLIO/vector_field_def.inc
===================================================================
--- /vendors/XMLIO_SERVER/current/src/XMLIO/vector_field_def.inc	(revision 1897)
+++ /vendors/XMLIO_SERVER/current/src/XMLIO/vector_field_def.inc	(revision 1897)
@@ -0,0 +1,17 @@
+
+  TYPE Pt_field__ 
+    TYPE (field),POINTER :: Pt
+    LOGICAL               :: owned
+  END TYPE Pt_field__
+
+  TYPE vector_field
+  
+    TYPE (Pt_field__), POINTER, DIMENSION(:) :: at => NULL()
+    INTEGER :: size
+    
+    INTEGER :: size_max
+    REAL    :: grow_factor
+    INTEGER :: chunk
+  
+  END TYPE vector_field
+  
Index: /vendors/XMLIO_SERVER/current/src/XMLIO/vector_field_dep_contains.inc
===================================================================
--- /vendors/XMLIO_SERVER/current/src/XMLIO/vector_field_dep_contains.inc	(revision 1897)
+++ /vendors/XMLIO_SERVER/current/src/XMLIO/vector_field_dep_contains.inc	(revision 1897)
@@ -0,0 +1,89 @@
+
+  SUBROUTINE vector_field_dep__new(vect,vect_size)
+  use mod_xmlio_parameters
+  IMPLICIT NONE
+    TYPE(vector_field_dep), INTENT(INOUT) :: vect
+    INTEGER, OPTIONAL, INTENT(IN) :: vect_size
+     
+    IF (ASSOCIATED(vect%at)) CALL vector_field_dep__delete(vect)
+    
+    IF (PRESENT(vect_size)) THEN 
+      vect%size_max=MAX(1,vect_size)
+    ELSE
+      vect%size_max=default_vector_size
+    ENDIF
+    
+    ALLOCATE(vect%at(vect%size_max))
+    
+    vect%size=0
+    vect%grow_factor=default_vector_grow_factor
+    
+  END SUBROUTINE vector_field_dep__new
+  
+  SUBROUTINE vector_field_dep__delete(vect)
+  IMPLICIT NONE
+    TYPE(vector_field_dep), INTENT(IN OUT) :: vect
+    
+    INTEGER                             :: i
+    
+    DO i=1,vect%size
+      IF (vect%at(i)%owned) DEALLOCATE(vect%at(i)%Pt)
+! doit-on avoir une subroutine du genre : CALL field_dep__delete() ???
+    ENDDO 
+    
+    IF (ASSOCIATED(vect%at)) DEALLOCATE(vect%at)
+    vect%size_max=0
+    
+  END SUBROUTINE vector_field_dep__delete
+  
+  SUBROUTINE vector_field_dep__get_new(vect,pt_value,pos)
+  IMPLICIT NONE
+  
+    TYPE(vector_field_dep), INTENT(INOUT)   :: vect
+    TYPE(field_dep),POINTER                 :: pt_value
+    INTEGER,OPTIONAL,INTENT(OUT)         :: Pos
+    
+    IF (vect%size==vect%size_max) CALL vector_field_dep__increase(vect)
+    
+    vect%size=vect%size+1
+    ALLOCATE(vect%at(vect%size)%pt)
+    vect%at(vect%size)%owned=.TRUE.
+    pt_value=>vect%at(vect%size)%pt
+    IF (PRESENT(pos)) pos=vect%size
+    
+  END SUBROUTINE vector_field_dep__get_new
+
+  SUBROUTINE vector_field_dep__set_new(vect,pt_value,pos)
+  IMPLICIT NONE
+  
+    TYPE(vector_field_dep), INTENT(INOUT)   :: vect
+    TYPE(field_dep),POINTER                 :: pt_value
+    INTEGER,OPTIONAL,INTENT(OUT)         :: Pos
+    
+    IF (vect%size==vect%size_max) CALL vector_field_dep__increase(vect)
+    
+    vect%size=vect%size+1
+    vect%at(vect%size)%pt=>pt_value
+    vect%at(vect%size)%owned=.FALSE.
+    IF (PRESENT(pos)) pos=vect%size
+    
+  END SUBROUTINE vector_field_dep__set_new
+  
+  SUBROUTINE vector_field_dep__increase(vect)
+    TYPE(vector_field_dep), INTENT(INOUT) :: vect
+    TYPE (Pt_field_dep__), POINTER, DIMENSION(:) :: Pt_tmp
+    INTEGER :: new_size
+    INTEGER :: i
+    
+    vect%size_max=MAX(vect%size_max+1,INT(vect%size_max*vect%grow_factor))
+    ALLOCATE(Pt_tmp(vect%size_max))
+    
+    DO i=1,vect%size
+     Pt_tmp(i)%pt=>vect%at(i)%pt
+    ENDDO
+    
+    DEALLOCATE(vect%at)
+    vect%at=>Pt_tmp
+    
+  END SUBROUTINE vector_field_dep__increase 
+    
Index: /vendors/XMLIO_SERVER/current/src/XMLIO/vector_field_dep_def.inc
===================================================================
--- /vendors/XMLIO_SERVER/current/src/XMLIO/vector_field_dep_def.inc	(revision 1897)
+++ /vendors/XMLIO_SERVER/current/src/XMLIO/vector_field_dep_def.inc	(revision 1897)
@@ -0,0 +1,17 @@
+
+  TYPE Pt_field_dep__ 
+    TYPE (field_dep),POINTER :: Pt
+    LOGICAL               :: owned
+  END TYPE Pt_field_dep__
+
+  TYPE vector_field_dep
+  
+    TYPE (Pt_field_dep__), POINTER, DIMENSION(:) :: at => NULL()
+    INTEGER :: size
+    
+    INTEGER :: size_max
+    REAL    :: grow_factor
+    INTEGER :: chunk
+  
+  END TYPE vector_field_dep
+  
Index: /vendors/XMLIO_SERVER/current/src/XMLIO/vector_field_group_contains.inc
===================================================================
--- /vendors/XMLIO_SERVER/current/src/XMLIO/vector_field_group_contains.inc	(revision 1897)
+++ /vendors/XMLIO_SERVER/current/src/XMLIO/vector_field_group_contains.inc	(revision 1897)
@@ -0,0 +1,89 @@
+
+  SUBROUTINE vector_field_group__new(vect,vect_size)
+  use mod_xmlio_parameters
+  IMPLICIT NONE
+    TYPE(vector_field_group), INTENT(INOUT) :: vect
+    INTEGER, OPTIONAL, INTENT(IN) :: vect_size
+     
+    IF (ASSOCIATED(vect%at)) CALL vector_field_group__delete(vect)
+    
+    IF (PRESENT(vect_size)) THEN 
+      vect%size_max=MAX(1,vect_size)
+    ELSE
+      vect%size_max=default_vector_size
+    ENDIF
+    
+    ALLOCATE(vect%at(vect%size_max))
+    
+    vect%size=0
+    vect%grow_factor=default_vector_grow_factor
+    
+  END SUBROUTINE vector_field_group__new
+  
+  SUBROUTINE vector_field_group__delete(vect)
+  IMPLICIT NONE
+    TYPE(vector_field_group), INTENT(IN OUT) :: vect
+    
+    INTEGER                             :: i
+    
+    DO i=1,vect%size
+      IF (vect%at(i)%owned) DEALLOCATE(vect%at(i)%Pt)
+! doit-on avoir une subroutine du genre : CALL field_group__delete() ???
+    ENDDO 
+    
+    IF (ASSOCIATED(vect%at)) DEALLOCATE(vect%at)
+    vect%size_max=0
+    
+  END SUBROUTINE vector_field_group__delete
+  
+  SUBROUTINE vector_field_group__get_new(vect,pt_value,pos)
+  IMPLICIT NONE
+  
+    TYPE(vector_field_group), INTENT(INOUT)   :: vect
+    TYPE(field_group),POINTER                 :: pt_value
+    INTEGER,OPTIONAL,INTENT(OUT)         :: Pos
+    
+    IF (vect%size==vect%size_max) CALL vector_field_group__increase(vect)
+    
+    vect%size=vect%size+1
+    ALLOCATE(vect%at(vect%size)%pt)
+    vect%at(vect%size)%owned=.TRUE.
+    pt_value=>vect%at(vect%size)%pt
+    IF (PRESENT(pos)) pos=vect%size
+    
+  END SUBROUTINE vector_field_group__get_new
+
+  SUBROUTINE vector_field_group__set_new(vect,pt_value,pos)
+  IMPLICIT NONE
+  
+    TYPE(vector_field_group), INTENT(INOUT)   :: vect
+    TYPE(field_group),POINTER                 :: pt_value
+    INTEGER,OPTIONAL,INTENT(OUT)         :: Pos
+    
+    IF (vect%size==vect%size_max) CALL vector_field_group__increase(vect)
+    
+    vect%size=vect%size+1
+    vect%at(vect%size)%pt=>pt_value
+    vect%at(vect%size)%owned=.FALSE.
+    IF (PRESENT(pos)) pos=vect%size
+    
+  END SUBROUTINE vector_field_group__set_new
+  
+  SUBROUTINE vector_field_group__increase(vect)
+    TYPE(vector_field_group), INTENT(INOUT) :: vect
+    TYPE (Pt_field_group__), POINTER, DIMENSION(:) :: Pt_tmp
+    INTEGER :: new_size
+    INTEGER :: i
+    
+    vect%size_max=MAX(vect%size_max+1,INT(vect%size_max*vect%grow_factor))
+    ALLOCATE(Pt_tmp(vect%size_max))
+    
+    DO i=1,vect%size
+     Pt_tmp(i)%pt=>vect%at(i)%pt
+    ENDDO
+    
+    DEALLOCATE(vect%at)
+    vect%at=>Pt_tmp
+    
+  END SUBROUTINE vector_field_group__increase 
+    
Index: /vendors/XMLIO_SERVER/current/src/XMLIO/vector_field_group_def.inc
===================================================================
--- /vendors/XMLIO_SERVER/current/src/XMLIO/vector_field_group_def.inc	(revision 1897)
+++ /vendors/XMLIO_SERVER/current/src/XMLIO/vector_field_group_def.inc	(revision 1897)
@@ -0,0 +1,17 @@
+
+  TYPE Pt_field_group__ 
+    TYPE (field_group),POINTER :: Pt
+    LOGICAL               :: owned
+  END TYPE Pt_field_group__
+
+  TYPE vector_field_group
+  
+    TYPE (Pt_field_group__), POINTER, DIMENSION(:) :: at => NULL()
+    INTEGER :: size
+    
+    INTEGER :: size_max
+    REAL    :: grow_factor
+    INTEGER :: chunk
+  
+  END TYPE vector_field_group
+  
Index: /vendors/XMLIO_SERVER/current/src/XMLIO/vector_field_out_contains.inc
===================================================================
--- /vendors/XMLIO_SERVER/current/src/XMLIO/vector_field_out_contains.inc	(revision 1897)
+++ /vendors/XMLIO_SERVER/current/src/XMLIO/vector_field_out_contains.inc	(revision 1897)
@@ -0,0 +1,89 @@
+
+  SUBROUTINE vector_field_out__new(vect,vect_size)
+  use mod_xmlio_parameters
+  IMPLICIT NONE
+    TYPE(vector_field_out), INTENT(INOUT) :: vect
+    INTEGER, OPTIONAL, INTENT(IN) :: vect_size
+     
+    IF (ASSOCIATED(vect%at)) CALL vector_field_out__delete(vect)
+    
+    IF (PRESENT(vect_size)) THEN 
+      vect%size_max=MAX(1,vect_size)
+    ELSE
+      vect%size_max=default_vector_size
+    ENDIF
+    
+    ALLOCATE(vect%at(vect%size_max))
+    
+    vect%size=0
+    vect%grow_factor=default_vector_grow_factor
+    
+  END SUBROUTINE vector_field_out__new
+  
+  SUBROUTINE vector_field_out__delete(vect)
+  IMPLICIT NONE
+    TYPE(vector_field_out), INTENT(IN OUT) :: vect
+    
+    INTEGER                             :: i
+    
+    DO i=1,vect%size
+      IF (vect%at(i)%owned) DEALLOCATE(vect%at(i)%Pt)
+! doit-on avoir une subroutine du genre : CALL field_out__delete() ???
+    ENDDO 
+    
+    IF (ASSOCIATED(vect%at)) DEALLOCATE(vect%at)
+    vect%size_max=0
+    
+  END SUBROUTINE vector_field_out__delete
+  
+  SUBROUTINE vector_field_out__get_new(vect,pt_value,pos)
+  IMPLICIT NONE
+  
+    TYPE(vector_field_out), INTENT(INOUT)   :: vect
+    TYPE(field_out),POINTER                 :: pt_value
+    INTEGER,OPTIONAL,INTENT(OUT)         :: Pos
+    
+    IF (vect%size==vect%size_max) CALL vector_field_out__increase(vect)
+    
+    vect%size=vect%size+1
+    ALLOCATE(vect%at(vect%size)%pt)
+    vect%at(vect%size)%owned=.TRUE.
+    pt_value=>vect%at(vect%size)%pt
+    IF (PRESENT(pos)) pos=vect%size
+    
+  END SUBROUTINE vector_field_out__get_new
+
+  SUBROUTINE vector_field_out__set_new(vect,pt_value,pos)
+  IMPLICIT NONE
+  
+    TYPE(vector_field_out), INTENT(INOUT)   :: vect
+    TYPE(field_out),POINTER                 :: pt_value
+    INTEGER,OPTIONAL,INTENT(OUT)         :: Pos
+    
+    IF (vect%size==vect%size_max) CALL vector_field_out__increase(vect)
+    
+    vect%size=vect%size+1
+    vect%at(vect%size)%pt=>pt_value
+    vect%at(vect%size)%owned=.FALSE.
+    IF (PRESENT(pos)) pos=vect%size
+    
+  END SUBROUTINE vector_field_out__set_new
+  
+  SUBROUTINE vector_field_out__increase(vect)
+    TYPE(vector_field_out), INTENT(INOUT) :: vect
+    TYPE (Pt_field_out__), POINTER, DIMENSION(:) :: Pt_tmp
+    INTEGER :: new_size
+    INTEGER :: i
+    
+    vect%size_max=MAX(vect%size_max+1,INT(vect%size_max*vect%grow_factor))
+    ALLOCATE(Pt_tmp(vect%size_max))
+    
+    DO i=1,vect%size
+     Pt_tmp(i)%pt=>vect%at(i)%pt
+    ENDDO
+    
+    DEALLOCATE(vect%at)
+    vect%at=>Pt_tmp
+    
+  END SUBROUTINE vector_field_out__increase 
+    
Index: /vendors/XMLIO_SERVER/current/src/XMLIO/vector_field_out_def.inc
===================================================================
--- /vendors/XMLIO_SERVER/current/src/XMLIO/vector_field_out_def.inc	(revision 1897)
+++ /vendors/XMLIO_SERVER/current/src/XMLIO/vector_field_out_def.inc	(revision 1897)
@@ -0,0 +1,17 @@
+
+  TYPE Pt_field_out__ 
+    TYPE (field_out),POINTER :: Pt
+    LOGICAL               :: owned
+  END TYPE Pt_field_out__
+
+  TYPE vector_field_out
+  
+    TYPE (Pt_field_out__), POINTER, DIMENSION(:) :: at => NULL()
+    INTEGER :: size
+    
+    INTEGER :: size_max
+    REAL    :: grow_factor
+    INTEGER :: chunk
+  
+  END TYPE vector_field_out
+  
Index: /vendors/XMLIO_SERVER/current/src/XMLIO/vector_file_contains.inc
===================================================================
--- /vendors/XMLIO_SERVER/current/src/XMLIO/vector_file_contains.inc	(revision 1897)
+++ /vendors/XMLIO_SERVER/current/src/XMLIO/vector_file_contains.inc	(revision 1897)
@@ -0,0 +1,89 @@
+
+  SUBROUTINE vector_file__new(vect,vect_size)
+  use mod_xmlio_parameters
+  IMPLICIT NONE
+    TYPE(vector_file), INTENT(INOUT) :: vect
+    INTEGER, OPTIONAL, INTENT(IN) :: vect_size
+     
+    IF (ASSOCIATED(vect%at)) CALL vector_file__delete(vect)
+    
+    IF (PRESENT(vect_size)) THEN 
+      vect%size_max=MAX(1,vect_size)
+    ELSE
+      vect%size_max=default_vector_size
+    ENDIF
+    
+    ALLOCATE(vect%at(vect%size_max))
+    
+    vect%size=0
+    vect%grow_factor=default_vector_grow_factor
+    
+  END SUBROUTINE vector_file__new
+  
+  SUBROUTINE vector_file__delete(vect)
+  IMPLICIT NONE
+    TYPE(vector_file), INTENT(IN OUT) :: vect
+    
+    INTEGER                             :: i
+    
+    DO i=1,vect%size
+      IF (vect%at(i)%owned) DEALLOCATE(vect%at(i)%Pt)
+! doit-on avoir une subroutine du genre : CALL file__delete() ???
+    ENDDO 
+    
+    IF (ASSOCIATED(vect%at)) DEALLOCATE(vect%at)
+    vect%size_max=0
+    
+  END SUBROUTINE vector_file__delete
+  
+  SUBROUTINE vector_file__get_new(vect,pt_value,pos)
+  IMPLICIT NONE
+  
+    TYPE(vector_file), INTENT(INOUT)   :: vect
+    TYPE(file),POINTER                 :: pt_value
+    INTEGER,OPTIONAL,INTENT(OUT)         :: Pos
+    
+    IF (vect%size==vect%size_max) CALL vector_file__increase(vect)
+    
+    vect%size=vect%size+1
+    ALLOCATE(vect%at(vect%size)%pt)
+    vect%at(vect%size)%owned=.TRUE.
+    pt_value=>vect%at(vect%size)%pt
+    IF (PRESENT(pos)) pos=vect%size
+    
+  END SUBROUTINE vector_file__get_new
+
+  SUBROUTINE vector_file__set_new(vect,pt_value,pos)
+  IMPLICIT NONE
+  
+    TYPE(vector_file), INTENT(INOUT)   :: vect
+    TYPE(file),POINTER                 :: pt_value
+    INTEGER,OPTIONAL,INTENT(OUT)         :: Pos
+    
+    IF (vect%size==vect%size_max) CALL vector_file__increase(vect)
+    
+    vect%size=vect%size+1
+    vect%at(vect%size)%pt=>pt_value
+    vect%at(vect%size)%owned=.FALSE.
+    IF (PRESENT(pos)) pos=vect%size
+    
+  END SUBROUTINE vector_file__set_new
+  
+  SUBROUTINE vector_file__increase(vect)
+    TYPE(vector_file), INTENT(INOUT) :: vect
+    TYPE (Pt_file__), POINTER, DIMENSION(:) :: Pt_tmp
+    INTEGER :: new_size
+    INTEGER :: i
+    
+    vect%size_max=MAX(vect%size_max+1,INT(vect%size_max*vect%grow_factor))
+    ALLOCATE(Pt_tmp(vect%size_max))
+    
+    DO i=1,vect%size
+     Pt_tmp(i)%pt=>vect%at(i)%pt
+    ENDDO
+    
+    DEALLOCATE(vect%at)
+    vect%at=>Pt_tmp
+    
+  END SUBROUTINE vector_file__increase 
+    
Index: /vendors/XMLIO_SERVER/current/src/XMLIO/vector_file_def.inc
===================================================================
--- /vendors/XMLIO_SERVER/current/src/XMLIO/vector_file_def.inc	(revision 1897)
+++ /vendors/XMLIO_SERVER/current/src/XMLIO/vector_file_def.inc	(revision 1897)
@@ -0,0 +1,17 @@
+
+  TYPE Pt_file__ 
+    TYPE (file),POINTER :: Pt
+    LOGICAL               :: owned
+  END TYPE Pt_file__
+
+  TYPE vector_file
+  
+    TYPE (Pt_file__), POINTER, DIMENSION(:) :: at => NULL()
+    INTEGER :: size
+    
+    INTEGER :: size_max
+    REAL    :: grow_factor
+    INTEGER :: chunk
+  
+  END TYPE vector_file
+  
Index: /vendors/XMLIO_SERVER/current/src/XMLIO/vector_file_dep_contains.inc
===================================================================
--- /vendors/XMLIO_SERVER/current/src/XMLIO/vector_file_dep_contains.inc	(revision 1897)
+++ /vendors/XMLIO_SERVER/current/src/XMLIO/vector_file_dep_contains.inc	(revision 1897)
@@ -0,0 +1,89 @@
+
+  SUBROUTINE vector_file_dep__new(vect,vect_size)
+  use mod_xmlio_parameters
+  IMPLICIT NONE
+    TYPE(vector_file_dep), INTENT(INOUT) :: vect
+    INTEGER, OPTIONAL, INTENT(IN) :: vect_size
+     
+    IF (ASSOCIATED(vect%at)) CALL vector_file_dep__delete(vect)
+    
+    IF (PRESENT(vect_size)) THEN 
+      vect%size_max=MAX(1,vect_size)
+    ELSE
+      vect%size_max=default_vector_size
+    ENDIF
+    
+    ALLOCATE(vect%at(vect%size_max))
+    
+    vect%size=0
+    vect%grow_factor=default_vector_grow_factor
+    
+  END SUBROUTINE vector_file_dep__new
+  
+  SUBROUTINE vector_file_dep__delete(vect)
+  IMPLICIT NONE
+    TYPE(vector_file_dep), INTENT(IN OUT) :: vect
+    
+    INTEGER                             :: i
+    
+    DO i=1,vect%size
+      IF (vect%at(i)%owned) DEALLOCATE(vect%at(i)%Pt)
+! doit-on avoir une subroutine du genre : CALL file_dep__delete() ???
+    ENDDO 
+    
+    IF (ASSOCIATED(vect%at)) DEALLOCATE(vect%at)
+    vect%size_max=0
+    
+  END SUBROUTINE vector_file_dep__delete
+  
+  SUBROUTINE vector_file_dep__get_new(vect,pt_value,pos)
+  IMPLICIT NONE
+  
+    TYPE(vector_file_dep), INTENT(INOUT)   :: vect
+    TYPE(file_dep),POINTER                 :: pt_value
+    INTEGER,OPTIONAL,INTENT(OUT)         :: Pos
+    
+    IF (vect%size==vect%size_max) CALL vector_file_dep__increase(vect)
+    
+    vect%size=vect%size+1
+    ALLOCATE(vect%at(vect%size)%pt)
+    vect%at(vect%size)%owned=.TRUE.
+    pt_value=>vect%at(vect%size)%pt
+    IF (PRESENT(pos)) pos=vect%size
+    
+  END SUBROUTINE vector_file_dep__get_new
+
+  SUBROUTINE vector_file_dep__set_new(vect,pt_value,pos)
+  IMPLICIT NONE
+  
+    TYPE(vector_file_dep), INTENT(INOUT)   :: vect
+    TYPE(file_dep),POINTER                 :: pt_value
+    INTEGER,OPTIONAL,INTENT(OUT)         :: Pos
+    
+    IF (vect%size==vect%size_max) CALL vector_file_dep__increase(vect)
+    
+    vect%size=vect%size+1
+    vect%at(vect%size)%pt=>pt_value
+    vect%at(vect%size)%owned=.FALSE.
+    IF (PRESENT(pos)) pos=vect%size
+    
+  END SUBROUTINE vector_file_dep__set_new
+  
+  SUBROUTINE vector_file_dep__increase(vect)
+    TYPE(vector_file_dep), INTENT(INOUT) :: vect
+    TYPE (Pt_file_dep__), POINTER, DIMENSION(:) :: Pt_tmp
+    INTEGER :: new_size
+    INTEGER :: i
+    
+    vect%size_max=MAX(vect%size_max+1,INT(vect%size_max*vect%grow_factor))
+    ALLOCATE(Pt_tmp(vect%size_max))
+    
+    DO i=1,vect%size
+     Pt_tmp(i)%pt=>vect%at(i)%pt
+    ENDDO
+    
+    DEALLOCATE(vect%at)
+    vect%at=>Pt_tmp
+    
+  END SUBROUTINE vector_file_dep__increase 
+    
Index: /vendors/XMLIO_SERVER/current/src/XMLIO/vector_file_dep_def.inc
===================================================================
--- /vendors/XMLIO_SERVER/current/src/XMLIO/vector_file_dep_def.inc	(revision 1897)
+++ /vendors/XMLIO_SERVER/current/src/XMLIO/vector_file_dep_def.inc	(revision 1897)
@@ -0,0 +1,17 @@
+
+  TYPE Pt_file_dep__ 
+    TYPE (file_dep),POINTER :: Pt
+    LOGICAL               :: owned
+  END TYPE Pt_file_dep__
+
+  TYPE vector_file_dep
+  
+    TYPE (Pt_file_dep__), POINTER, DIMENSION(:) :: at => NULL()
+    INTEGER :: size
+    
+    INTEGER :: size_max
+    REAL    :: grow_factor
+    INTEGER :: chunk
+  
+  END TYPE vector_file_dep
+  
Index: /vendors/XMLIO_SERVER/current/src/XMLIO/vector_file_group_contains.inc
===================================================================
--- /vendors/XMLIO_SERVER/current/src/XMLIO/vector_file_group_contains.inc	(revision 1897)
+++ /vendors/XMLIO_SERVER/current/src/XMLIO/vector_file_group_contains.inc	(revision 1897)
@@ -0,0 +1,89 @@
+
+  SUBROUTINE vector_file_group__new(vect,vect_size)
+  use mod_xmlio_parameters
+  IMPLICIT NONE
+    TYPE(vector_file_group), INTENT(INOUT) :: vect
+    INTEGER, OPTIONAL, INTENT(IN) :: vect_size
+     
+    IF (ASSOCIATED(vect%at)) CALL vector_file_group__delete(vect)
+    
+    IF (PRESENT(vect_size)) THEN 
+      vect%size_max=MAX(1,vect_size)
+    ELSE
+      vect%size_max=default_vector_size
+    ENDIF
+    
+    ALLOCATE(vect%at(vect%size_max))
+    
+    vect%size=0
+    vect%grow_factor=default_vector_grow_factor
+    
+  END SUBROUTINE vector_file_group__new
+  
+  SUBROUTINE vector_file_group__delete(vect)
+  IMPLICIT NONE
+    TYPE(vector_file_group), INTENT(IN OUT) :: vect
+    
+    INTEGER                             :: i
+    
+    DO i=1,vect%size
+      IF (vect%at(i)%owned) DEALLOCATE(vect%at(i)%Pt)
+! doit-on avoir une subroutine du genre : CALL file_group__delete() ???
+    ENDDO 
+    
+    IF (ASSOCIATED(vect%at)) DEALLOCATE(vect%at)
+    vect%size_max=0
+    
+  END SUBROUTINE vector_file_group__delete
+  
+  SUBROUTINE vector_file_group__get_new(vect,pt_value,pos)
+  IMPLICIT NONE
+  
+    TYPE(vector_file_group), INTENT(INOUT)   :: vect
+    TYPE(file_group),POINTER                 :: pt_value
+    INTEGER,OPTIONAL,INTENT(OUT)         :: Pos
+    
+    IF (vect%size==vect%size_max) CALL vector_file_group__increase(vect)
+    
+    vect%size=vect%size+1
+    ALLOCATE(vect%at(vect%size)%pt)
+    vect%at(vect%size)%owned=.TRUE.
+    pt_value=>vect%at(vect%size)%pt
+    IF (PRESENT(pos)) pos=vect%size
+    
+  END SUBROUTINE vector_file_group__get_new
+
+  SUBROUTINE vector_file_group__set_new(vect,pt_value,pos)
+  IMPLICIT NONE
+  
+    TYPE(vector_file_group), INTENT(INOUT)   :: vect
+    TYPE(file_group),POINTER                 :: pt_value
+    INTEGER,OPTIONAL,INTENT(OUT)         :: Pos
+    
+    IF (vect%size==vect%size_max) CALL vector_file_group__increase(vect)
+    
+    vect%size=vect%size+1
+    vect%at(vect%size)%pt=>pt_value
+    vect%at(vect%size)%owned=.FALSE.
+    IF (PRESENT(pos)) pos=vect%size
+    
+  END SUBROUTINE vector_file_group__set_new
+  
+  SUBROUTINE vector_file_group__increase(vect)
+    TYPE(vector_file_group), INTENT(INOUT) :: vect
+    TYPE (Pt_file_group__), POINTER, DIMENSION(:) :: Pt_tmp
+    INTEGER :: new_size
+    INTEGER :: i
+    
+    vect%size_max=MAX(vect%size_max+1,INT(vect%size_max*vect%grow_factor))
+    ALLOCATE(Pt_tmp(vect%size_max))
+    
+    DO i=1,vect%size
+     Pt_tmp(i)%pt=>vect%at(i)%pt
+    ENDDO
+    
+    DEALLOCATE(vect%at)
+    vect%at=>Pt_tmp
+    
+  END SUBROUTINE vector_file_group__increase 
+    
Index: /vendors/XMLIO_SERVER/current/src/XMLIO/vector_file_group_def.inc
===================================================================
--- /vendors/XMLIO_SERVER/current/src/XMLIO/vector_file_group_def.inc	(revision 1897)
+++ /vendors/XMLIO_SERVER/current/src/XMLIO/vector_file_group_def.inc	(revision 1897)
@@ -0,0 +1,17 @@
+
+  TYPE Pt_file_group__ 
+    TYPE (file_group),POINTER :: Pt
+    LOGICAL               :: owned
+  END TYPE Pt_file_group__
+
+  TYPE vector_file_group
+  
+    TYPE (Pt_file_group__), POINTER, DIMENSION(:) :: at => NULL()
+    INTEGER :: size
+    
+    INTEGER :: size_max
+    REAL    :: grow_factor
+    INTEGER :: chunk
+  
+  END TYPE vector_file_group
+  
Index: /vendors/XMLIO_SERVER/current/src/XMLIO/vector_grid_contains.inc
===================================================================
--- /vendors/XMLIO_SERVER/current/src/XMLIO/vector_grid_contains.inc	(revision 1897)
+++ /vendors/XMLIO_SERVER/current/src/XMLIO/vector_grid_contains.inc	(revision 1897)
@@ -0,0 +1,89 @@
+
+  SUBROUTINE vector_grid__new(vect,vect_size)
+  use mod_xmlio_parameters
+  IMPLICIT NONE
+    TYPE(vector_grid), INTENT(INOUT) :: vect
+    INTEGER, OPTIONAL, INTENT(IN) :: vect_size
+     
+    IF (ASSOCIATED(vect%at)) CALL vector_grid__delete(vect)
+    
+    IF (PRESENT(vect_size)) THEN 
+      vect%size_max=MAX(1,vect_size)
+    ELSE
+      vect%size_max=default_vector_size
+    ENDIF
+    
+    ALLOCATE(vect%at(vect%size_max))
+    
+    vect%size=0
+    vect%grow_factor=default_vector_grow_factor
+    
+  END SUBROUTINE vector_grid__new
+  
+  SUBROUTINE vector_grid__delete(vect)
+  IMPLICIT NONE
+    TYPE(vector_grid), INTENT(IN OUT) :: vect
+    
+    INTEGER                             :: i
+    
+    DO i=1,vect%size
+      IF (vect%at(i)%owned) DEALLOCATE(vect%at(i)%Pt)
+! doit-on avoir une subroutine du genre : CALL grid__delete() ???
+    ENDDO 
+    
+    IF (ASSOCIATED(vect%at)) DEALLOCATE(vect%at)
+    vect%size_max=0
+    
+  END SUBROUTINE vector_grid__delete
+  
+  SUBROUTINE vector_grid__get_new(vect,pt_value,pos)
+  IMPLICIT NONE
+  
+    TYPE(vector_grid), INTENT(INOUT)   :: vect
+    TYPE(grid),POINTER                 :: pt_value
+    INTEGER,OPTIONAL,INTENT(OUT)         :: Pos
+    
+    IF (vect%size==vect%size_max) CALL vector_grid__increase(vect)
+    
+    vect%size=vect%size+1
+    ALLOCATE(vect%at(vect%size)%pt)
+    vect%at(vect%size)%owned=.TRUE.
+    pt_value=>vect%at(vect%size)%pt
+    IF (PRESENT(pos)) pos=vect%size
+    
+  END SUBROUTINE vector_grid__get_new
+
+  SUBROUTINE vector_grid__set_new(vect,pt_value,pos)
+  IMPLICIT NONE
+  
+    TYPE(vector_grid), INTENT(INOUT)   :: vect
+    TYPE(grid),POINTER                 :: pt_value
+    INTEGER,OPTIONAL,INTENT(OUT)         :: Pos
+    
+    IF (vect%size==vect%size_max) CALL vector_grid__increase(vect)
+    
+    vect%size=vect%size+1
+    vect%at(vect%size)%pt=>pt_value
+    vect%at(vect%size)%owned=.FALSE.
+    IF (PRESENT(pos)) pos=vect%size
+    
+  END SUBROUTINE vector_grid__set_new
+  
+  SUBROUTINE vector_grid__increase(vect)
+    TYPE(vector_grid), INTENT(INOUT) :: vect
+    TYPE (Pt_grid__), POINTER, DIMENSION(:) :: Pt_tmp
+    INTEGER :: new_size
+    INTEGER :: i
+    
+    vect%size_max=MAX(vect%size_max+1,INT(vect%size_max*vect%grow_factor))
+    ALLOCATE(Pt_tmp(vect%size_max))
+    
+    DO i=1,vect%size
+     Pt_tmp(i)%pt=>vect%at(i)%pt
+    ENDDO
+    
+    DEALLOCATE(vect%at)
+    vect%at=>Pt_tmp
+    
+  END SUBROUTINE vector_grid__increase 
+    
Index: /vendors/XMLIO_SERVER/current/src/XMLIO/vector_grid_def.inc
===================================================================
--- /vendors/XMLIO_SERVER/current/src/XMLIO/vector_grid_def.inc	(revision 1897)
+++ /vendors/XMLIO_SERVER/current/src/XMLIO/vector_grid_def.inc	(revision 1897)
@@ -0,0 +1,17 @@
+
+  TYPE Pt_grid__ 
+    TYPE (grid),POINTER :: Pt
+    LOGICAL               :: owned
+  END TYPE Pt_grid__
+
+  TYPE vector_grid
+  
+    TYPE (Pt_grid__), POINTER, DIMENSION(:) :: at => NULL()
+    INTEGER :: size
+    
+    INTEGER :: size_max
+    REAL    :: grow_factor
+    INTEGER :: chunk
+  
+  END TYPE vector_grid
+  
Index: /vendors/XMLIO_SERVER/current/src/XMLIO/vector_grid_group_contains.inc
===================================================================
--- /vendors/XMLIO_SERVER/current/src/XMLIO/vector_grid_group_contains.inc	(revision 1897)
+++ /vendors/XMLIO_SERVER/current/src/XMLIO/vector_grid_group_contains.inc	(revision 1897)
@@ -0,0 +1,89 @@
+
+  SUBROUTINE vector_grid_group__new(vect,vect_size)
+  use mod_xmlio_parameters
+  IMPLICIT NONE
+    TYPE(vector_grid_group), INTENT(INOUT) :: vect
+    INTEGER, OPTIONAL, INTENT(IN) :: vect_size
+     
+    IF (ASSOCIATED(vect%at)) CALL vector_grid_group__delete(vect)
+    
+    IF (PRESENT(vect_size)) THEN 
+      vect%size_max=MAX(1,vect_size)
+    ELSE
+      vect%size_max=default_vector_size
+    ENDIF
+    
+    ALLOCATE(vect%at(vect%size_max))
+    
+    vect%size=0
+    vect%grow_factor=default_vector_grow_factor
+    
+  END SUBROUTINE vector_grid_group__new
+  
+  SUBROUTINE vector_grid_group__delete(vect)
+  IMPLICIT NONE
+    TYPE(vector_grid_group), INTENT(IN OUT) :: vect
+    
+    INTEGER                             :: i
+    
+    DO i=1,vect%size
+      IF (vect%at(i)%owned) DEALLOCATE(vect%at(i)%Pt)
+! doit-on avoir une subroutine du genre : CALL grid_group__delete() ???
+    ENDDO 
+    
+    IF (ASSOCIATED(vect%at)) DEALLOCATE(vect%at)
+    vect%size_max=0
+    
+  END SUBROUTINE vector_grid_group__delete
+  
+  SUBROUTINE vector_grid_group__get_new(vect,pt_value,pos)
+  IMPLICIT NONE
+  
+    TYPE(vector_grid_group), INTENT(INOUT)   :: vect
+    TYPE(grid_group),POINTER                 :: pt_value
+    INTEGER,OPTIONAL,INTENT(OUT)         :: Pos
+    
+    IF (vect%size==vect%size_max) CALL vector_grid_group__increase(vect)
+    
+    vect%size=vect%size+1
+    ALLOCATE(vect%at(vect%size)%pt)
+    vect%at(vect%size)%owned=.TRUE.
+    pt_value=>vect%at(vect%size)%pt
+    IF (PRESENT(pos)) pos=vect%size
+    
+  END SUBROUTINE vector_grid_group__get_new
+
+  SUBROUTINE vector_grid_group__set_new(vect,pt_value,pos)
+  IMPLICIT NONE
+  
+    TYPE(vector_grid_group), INTENT(INOUT)   :: vect
+    TYPE(grid_group),POINTER                 :: pt_value
+    INTEGER,OPTIONAL,INTENT(OUT)         :: Pos
+    
+    IF (vect%size==vect%size_max) CALL vector_grid_group__increase(vect)
+    
+    vect%size=vect%size+1
+    vect%at(vect%size)%pt=>pt_value
+    vect%at(vect%size)%owned=.FALSE.
+    IF (PRESENT(pos)) pos=vect%size
+    
+  END SUBROUTINE vector_grid_group__set_new
+  
+  SUBROUTINE vector_grid_group__increase(vect)
+    TYPE(vector_grid_group), INTENT(INOUT) :: vect
+    TYPE (Pt_grid_group__), POINTER, DIMENSION(:) :: Pt_tmp
+    INTEGER :: new_size
+    INTEGER :: i
+    
+    vect%size_max=MAX(vect%size_max+1,INT(vect%size_max*vect%grow_factor))
+    ALLOCATE(Pt_tmp(vect%size_max))
+    
+    DO i=1,vect%size
+     Pt_tmp(i)%pt=>vect%at(i)%pt
+    ENDDO
+    
+    DEALLOCATE(vect%at)
+    vect%at=>Pt_tmp
+    
+  END SUBROUTINE vector_grid_group__increase 
+    
Index: /vendors/XMLIO_SERVER/current/src/XMLIO/vector_grid_group_def.inc
===================================================================
--- /vendors/XMLIO_SERVER/current/src/XMLIO/vector_grid_group_def.inc	(revision 1897)
+++ /vendors/XMLIO_SERVER/current/src/XMLIO/vector_grid_group_def.inc	(revision 1897)
@@ -0,0 +1,17 @@
+
+  TYPE Pt_grid_group__ 
+    TYPE (grid_group),POINTER :: Pt
+    LOGICAL               :: owned
+  END TYPE Pt_grid_group__
+
+  TYPE vector_grid_group
+  
+    TYPE (Pt_grid_group__), POINTER, DIMENSION(:) :: at => NULL()
+    INTEGER :: size
+    
+    INTEGER :: size_max
+    REAL    :: grow_factor
+    INTEGER :: chunk
+  
+  END TYPE vector_grid_group
+  
Index: /vendors/XMLIO_SERVER/current/src/XMLIO/vector_node_contains.inc
===================================================================
--- /vendors/XMLIO_SERVER/current/src/XMLIO/vector_node_contains.inc	(revision 1897)
+++ /vendors/XMLIO_SERVER/current/src/XMLIO/vector_node_contains.inc	(revision 1897)
@@ -0,0 +1,89 @@
+
+  SUBROUTINE vector_node__new(vect,vect_size)
+  use mod_xmlio_parameters
+  IMPLICIT NONE
+    TYPE(vector_node), INTENT(INOUT) :: vect
+    INTEGER, OPTIONAL, INTENT(IN) :: vect_size
+     
+    IF (ASSOCIATED(vect%at)) CALL vector_node__delete(vect)
+    
+    IF (PRESENT(vect_size)) THEN 
+      vect%size_max=MAX(1,vect_size)
+    ELSE
+      vect%size_max=default_vector_size
+    ENDIF
+    
+    ALLOCATE(vect%at(vect%size_max))
+    
+    vect%size=0
+    vect%grow_factor=default_vector_grow_factor
+    
+  END SUBROUTINE vector_node__new
+  
+  SUBROUTINE vector_node__delete(vect)
+  IMPLICIT NONE
+    TYPE(vector_node), INTENT(IN OUT) :: vect
+    
+    INTEGER                             :: i
+    
+    DO i=1,vect%size
+      IF (vect%at(i)%owned) DEALLOCATE(vect%at(i)%Pt)
+! doit-on avoir une subroutine du genre : CALL node__delete() ???
+    ENDDO 
+    
+    IF (ASSOCIATED(vect%at)) DEALLOCATE(vect%at)
+    vect%size_max=0
+    
+  END SUBROUTINE vector_node__delete
+  
+  SUBROUTINE vector_node__get_new(vect,pt_value,pos)
+  IMPLICIT NONE
+  
+    TYPE(vector_node), INTENT(INOUT)   :: vect
+    TYPE(node),POINTER                 :: pt_value
+    INTEGER,OPTIONAL,INTENT(OUT)         :: Pos
+    
+    IF (vect%size==vect%size_max) CALL vector_node__increase(vect)
+    
+    vect%size=vect%size+1
+    ALLOCATE(vect%at(vect%size)%pt)
+    vect%at(vect%size)%owned=.TRUE.
+    pt_value=>vect%at(vect%size)%pt
+    IF (PRESENT(pos)) pos=vect%size
+    
+  END SUBROUTINE vector_node__get_new
+
+  SUBROUTINE vector_node__set_new(vect,pt_value,pos)
+  IMPLICIT NONE
+  
+    TYPE(vector_node), INTENT(INOUT)   :: vect
+    TYPE(node),POINTER                 :: pt_value
+    INTEGER,OPTIONAL,INTENT(OUT)         :: Pos
+    
+    IF (vect%size==vect%size_max) CALL vector_node__increase(vect)
+    
+    vect%size=vect%size+1
+    vect%at(vect%size)%pt=>pt_value
+    vect%at(vect%size)%owned=.FALSE.
+    IF (PRESENT(pos)) pos=vect%size
+    
+  END SUBROUTINE vector_node__set_new
+  
+  SUBROUTINE vector_node__increase(vect)
+    TYPE(vector_node), INTENT(INOUT) :: vect
+    TYPE (Pt_node__), POINTER, DIMENSION(:) :: Pt_tmp
+    INTEGER :: new_size
+    INTEGER :: i
+    
+    vect%size_max=MAX(vect%size_max+1,INT(vect%size_max*vect%grow_factor))
+    ALLOCATE(Pt_tmp(vect%size_max))
+    
+    DO i=1,vect%size
+     Pt_tmp(i)%pt=>vect%at(i)%pt
+    ENDDO
+    
+    DEALLOCATE(vect%at)
+    vect%at=>Pt_tmp
+    
+  END SUBROUTINE vector_node__increase 
+    
Index: /vendors/XMLIO_SERVER/current/src/XMLIO/vector_node_def.inc
===================================================================
--- /vendors/XMLIO_SERVER/current/src/XMLIO/vector_node_def.inc	(revision 1897)
+++ /vendors/XMLIO_SERVER/current/src/XMLIO/vector_node_def.inc	(revision 1897)
@@ -0,0 +1,17 @@
+
+  TYPE Pt_node__ 
+    TYPE (node),POINTER :: Pt
+    LOGICAL               :: owned
+  END TYPE Pt_node__
+
+  TYPE vector_node
+  
+    TYPE (Pt_node__), POINTER, DIMENSION(:) :: at => NULL()
+    INTEGER :: size
+    
+    INTEGER :: size_max
+    REAL    :: grow_factor
+    INTEGER :: chunk
+  
+  END TYPE vector_node
+  
Index: /vendors/XMLIO_SERVER/current/src/XMLIO/vector_zoom_contains.inc
===================================================================
--- /vendors/XMLIO_SERVER/current/src/XMLIO/vector_zoom_contains.inc	(revision 1897)
+++ /vendors/XMLIO_SERVER/current/src/XMLIO/vector_zoom_contains.inc	(revision 1897)
@@ -0,0 +1,89 @@
+
+  SUBROUTINE vector_zoom__new(vect,vect_size)
+  use mod_xmlio_parameters
+  IMPLICIT NONE
+    TYPE(vector_zoom), INTENT(INOUT) :: vect
+    INTEGER, OPTIONAL, INTENT(IN) :: vect_size
+     
+    IF (ASSOCIATED(vect%at)) CALL vector_zoom__delete(vect)
+    
+    IF (PRESENT(vect_size)) THEN 
+      vect%size_max=MAX(1,vect_size)
+    ELSE
+      vect%size_max=default_vector_size
+    ENDIF
+    
+    ALLOCATE(vect%at(vect%size_max))
+    
+    vect%size=0
+    vect%grow_factor=default_vector_grow_factor
+    
+  END SUBROUTINE vector_zoom__new
+  
+  SUBROUTINE vector_zoom__delete(vect)
+  IMPLICIT NONE
+    TYPE(vector_zoom), INTENT(IN OUT) :: vect
+    
+    INTEGER                             :: i
+    
+    DO i=1,vect%size
+      IF (vect%at(i)%owned) DEALLOCATE(vect%at(i)%Pt)
+! doit-on avoir une subroutine du genre : CALL zoom__delete() ???
+    ENDDO 
+    
+    IF (ASSOCIATED(vect%at)) DEALLOCATE(vect%at)
+    vect%size_max=0
+    
+  END SUBROUTINE vector_zoom__delete
+  
+  SUBROUTINE vector_zoom__get_new(vect,pt_value,pos)
+  IMPLICIT NONE
+  
+    TYPE(vector_zoom), INTENT(INOUT)   :: vect
+    TYPE(zoom),POINTER                 :: pt_value
+    INTEGER,OPTIONAL,INTENT(OUT)         :: Pos
+    
+    IF (vect%size==vect%size_max) CALL vector_zoom__increase(vect)
+    
+    vect%size=vect%size+1
+    ALLOCATE(vect%at(vect%size)%pt)
+    vect%at(vect%size)%owned=.TRUE.
+    pt_value=>vect%at(vect%size)%pt
+    IF (PRESENT(pos)) pos=vect%size
+    
+  END SUBROUTINE vector_zoom__get_new
+
+  SUBROUTINE vector_zoom__set_new(vect,pt_value,pos)
+  IMPLICIT NONE
+  
+    TYPE(vector_zoom), INTENT(INOUT)   :: vect
+    TYPE(zoom),POINTER                 :: pt_value
+    INTEGER,OPTIONAL,INTENT(OUT)         :: Pos
+    
+    IF (vect%size==vect%size_max) CALL vector_zoom__increase(vect)
+    
+    vect%size=vect%size+1
+    vect%at(vect%size)%pt=>pt_value
+    vect%at(vect%size)%owned=.FALSE.
+    IF (PRESENT(pos)) pos=vect%size
+    
+  END SUBROUTINE vector_zoom__set_new
+  
+  SUBROUTINE vector_zoom__increase(vect)
+    TYPE(vector_zoom), INTENT(INOUT) :: vect
+    TYPE (Pt_zoom__), POINTER, DIMENSION(:) :: Pt_tmp
+    INTEGER :: new_size
+    INTEGER :: i
+    
+    vect%size_max=MAX(vect%size_max+1,INT(vect%size_max*vect%grow_factor))
+    ALLOCATE(Pt_tmp(vect%size_max))
+    
+    DO i=1,vect%size
+     Pt_tmp(i)%pt=>vect%at(i)%pt
+    ENDDO
+    
+    DEALLOCATE(vect%at)
+    vect%at=>Pt_tmp
+    
+  END SUBROUTINE vector_zoom__increase 
+    
Index: /vendors/XMLIO_SERVER/current/src/XMLIO/vector_zoom_def.inc
===================================================================
--- /vendors/XMLIO_SERVER/current/src/XMLIO/vector_zoom_def.inc	(revision 1897)
+++ /vendors/XMLIO_SERVER/current/src/XMLIO/vector_zoom_def.inc	(revision 1897)
@@ -0,0 +1,17 @@
+
+  TYPE Pt_zoom__ 
+    TYPE (zoom),POINTER :: Pt
+    LOGICAL               :: owned
+  END TYPE Pt_zoom__
+
+  TYPE vector_zoom
+  
+    TYPE (Pt_zoom__), POINTER, DIMENSION(:) :: at => NULL()
+    INTEGER :: size
+    
+    INTEGER :: size_max
+    REAL    :: grow_factor
+    INTEGER :: chunk
+  
+  END TYPE vector_zoom
+  
Index: /vendors/XMLIO_SERVER/current/src/XMLIO/xmlio.f90
===================================================================
--- /vendors/XMLIO_SERVER/current/src/XMLIO/xmlio.f90	(revision 1897)
+++ /vendors/XMLIO_SERVER/current/src/XMLIO/xmlio.f90	(revision 1897)
@@ -0,0 +1,53 @@
+MODULE xmlio
+
+  USE mod_field
+  USE mod_field_group
+  USE mod_field_definition
+  USE mod_grid
+  USE mod_grid_group
+  USE mod_grid_definition
+  USE mod_axis
+  USE mod_axis_group
+  USE mod_axis_definition
+  USE mod_file
+  USE mod_file_group
+  USE mod_file_definition
+  USE mod_dependency
+  USE string_function
+  USE error_msg
+  USE mod_context
+  USE mod_time_parameters
+  
+CONTAINS
+
+  SUBROUTINE xmlio__Init(xml_file)
+  USE parsing_xml
+  IMPLICIT NONE
+    CHARACTER(LEN=*),INTENT(IN) :: xml_file
+    
+    CALL context__init
+    CALL parsing_xml_file(xml_file)
+    
+  END SUBROUTINE xmlio__init
+  
+  
+  SUBROUTINE xmlio__close_definition
+  IMPLICIT NONE
+  
+    CALL axis_group__apply_default(axis_definition)
+    CALL grid_group__apply_default(grid_definition)
+    CALL field_group__apply_default(field_definition)
+    CALL file_group__apply_default(file_definition)
+  
+    CALL field_group__solve_ref(field_definition)
+    CALL file_group__solve_field_ref(file_definition)
+
+    CALL file_group__check(file_definition)
+    CALL axis_group__check(axis_definition)
+    CALL grid_group__process_domain(grid_definition)
+     
+    CALL set_dependency
+
+  END SUBROUTINE xmlio__close_definition
+
+END MODULE xmlio
