diff --git a/src/ARCH_SRC/CPL_WAVE/MNH/ground_paramn.f90 b/src/ARCH_SRC/CPL_WAVE/MNH/ground_paramn.f90
new file mode 100644
index 0000000000000000000000000000000000000000..ca327d15c990c80396369f5ad0d79a2c43afeb91
--- /dev/null
+++ b/src/ARCH_SRC/CPL_WAVE/MNH/ground_paramn.f90
@@ -0,0 +1,921 @@
+!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC for details. version 1.
+!-----------------------------------------------------------------
+!--------------- special set of characters for RCS information
+!-----------------------------------------------------------------
+! $Source$ $Revision$
+! MASDEV4_7 soil 2006/10/27 16:02:47
+!-----------------------------------------------------------------
+!     ##########
+MODULE MODI_GROUND_PARAM_n
+!     ##########
+!
+INTERFACE 
+!
+      SUBROUTINE GROUND_PARAM_n( PSFTH, PSFRV, PSFSV, PSFCO2, PSFU, PSFV, &
+                                 PDIR_ALB, PSCA_ALB, PEMIS, PTSRAD        )
+!
+!* surface fluxes
+!  --------------
+!
+REAL, DIMENSION(:,:), INTENT(OUT) :: PSFTH ! surface flux of potential temperature (Km/s)
+REAL, DIMENSION(:,:), INTENT(OUT) :: PSFRV ! surface flux of water vapor           (m/s*kg/kg)
+REAL, DIMENSION(:,:,:),INTENT(OUT):: PSFSV ! surface flux of scalar                (m/s*kg/kg)
+                                           ! flux of chemical var.                 (ppp.m/s)
+REAL, DIMENSION(:,:), INTENT(OUT) :: PSFCO2! surface flux of CO2                   (m/s*kg/kg)
+REAL, DIMENSION(:,:), INTENT(OUT) :: PSFU  ! surface fluxes of horizontal   
+REAL, DIMENSION(:,:), INTENT(OUT) :: PSFV  ! momentum in x and y directions        (m2/s2)
+!
+!* Radiative parameters
+!  --------------------
+!
+REAL, DIMENSION(:,:,:), INTENT(OUT) :: PDIR_ALB  ! direct  albedo for each spectral band (-)
+REAL, DIMENSION(:,:,:), INTENT(OUT) :: PSCA_ALB  ! diffuse albedo for each spectral band (-)
+REAL, DIMENSION(:,:),   INTENT(OUT) :: PEMIS     ! surface emissivity                    (-)
+REAL, DIMENSION(:,:),   INTENT(OUT) :: PTSRAD    ! surface radiative temperature         (K)
+!
+END SUBROUTINE GROUND_PARAM_n
+!
+END INTERFACE
+!
+END MODULE MODI_GROUND_PARAM_n
+!
+!     ######################################################################
+      SUBROUTINE GROUND_PARAM_n( PSFTH, PSFRV, PSFSV, PSFCO2, PSFU, PSFV, &
+                                 PDIR_ALB, PSCA_ALB, PEMIS, PTSRAD        )
+!     #######################################################################
+!
+!
+!!****  *GROUND_PARAM*  
+!!
+!!    PURPOSE
+!!    -------
+!       Monitor to call the externalized surface
+!     
+!!**  METHOD
+!!    ------
+!
+!!    EXTERNAL
+!!    --------
+!!
+!!    IMPLICIT ARGUMENTS
+!!    ------------------
+!!
+!!
+!!    REFERENCE
+!!    ---------
+!!
+!!    Noilhan and Planton (1989)
+!!      
+!!    AUTHOR
+!!    ------
+!!	S. Belair           * Meteo-France *
+!!
+!!    MODIFICATIONS
+!!    -------------
+!!      Original    10/03/95 
+!!      (J.Stein)   25/10/95  add the rain flux computation at the ground
+!!                            and the lbc
+!!      (J.Stein)   15/11/95  include the strong slopes cases
+!!      (J.Stein)   06/02/96  bug correction for the precipitation flux writing 
+!!      (J.Stein)   20/05/96  set the right IGRID value for the rain rate
+!!      (J.Viviand) 04/02/97  add cold and convective precipitation rate
+!!      (J.Stein)   22/06/97  use the absolute pressure    
+!!      (V.Masson)  09/07/97  add directional z0 computations and RESA correction     
+!!      (V.Masson)  13/02/98  merge the ISBA and TSZ0 routines,
+!!                            rename the routine as a monitor, called by PHYS_PARAMn
+!!                            add the town parameterization
+!!                            recomputes z0 where snow is.
+!!                            pack and unpack of 2D fields into 1D fields
+!!      (V.Masson)  04/01/00  removes the TSZ0 case
+!       (F.Solmon/V.Masson)   adapatation for patch approach
+!                             modification of internal subroutine pack/ allocation in function 
+!                              of patch indices
+!                             calling of isba for each defined patch
+!                             averaging of patch fluxes to get nat fluxes 
+!       (P. Tulet/G.Guenais)  04/02/01  separation of vegetatives class
+!                                           for friction velocity and 
+!                                           aerodynamical resistance
+!      (S Donnier)            09/12/02  add specific humidity at 2m for diagnostic
+!      (V.Masson)             01/03/03  externalisation of the surface schemes!
+!      (P.Tulet )             01/11/03  externalisation of the surface chemistry!
+!!     (D.Gazen)              01/12/03  change emissions handling for surf. externalization
+!!     (J.escobar)            18/10/2012 missing USE MODI_COUPLING_SURF_ATM_n & MODI_DIAG_SURF_ATM_n
+!      (J.escobar)            02/2014 add Forefire coupling
+!!     (G.Delautier)          06/2016 phasage surfex 8
+!!     (J.Pianezze)           08/2016 add send/recv oasis functions
+!-------------------------------------------------------------------------------
+!
+!*       0.     DECLARATIONS
+!               ------------
+!
+! 
+#ifdef CPLOASIS
+USE MODD_IO_SURF_MNH, ONLY : NLUOUT
+USE MODI_GET_HALO
+USE MODI_MNH_OASIS_RECV
+USE MODI_MNH_OASIS_SEND
+USE MODD_DYN, ONLY : XSEGLEN
+#endif
+!
+USE MODD_CST,        ONLY : XP00, XCPD, XRD, XRV,XRHOLW, XDAY, XPI, XLVTT, XMD, XAVOGADRO
+USE MODD_PARAMETERS, ONLY : JPVEXT, XUNDEF
+USE MODD_DYN_n,      ONLY : XTSTEP
+USE MODD_CH_MNHC_n,  ONLY : LCH_SURFACE_FLUX
+USE MODD_FIELD_n,    ONLY : XUT, XVT, XWT, XTHT, XRT, XPABST, XSVT, XTKET
+USE MODD_METRICS_n,  ONLY : XDXX, XDYY, XDZZ
+USE MODD_DIM_n,      ONLY : NKMAX
+USE MODD_GRID_n,     ONLY : XLON, XZZ, XDIRCOSXW, XDIRCOSYW, XDIRCOSZW, &
+                            XCOSSLOPE, XSINSLOPE, XZS
+USE MODD_REF_n,      ONLY : XRHODREF
+USE MODD_CONF_n,     ONLY : NRR
+USE MODD_PARAM_n,    ONLY : CDCONV,CCLOUD, CRAD
+USE MODD_PRECIP_n,   ONLY : XINPRC, XINPRR, XINPRS, XINPRG, XINPRH
+USE MODD_DEEP_CONVECTION_n, ONLY : XPRCONV, XPRSCONV
+USE MODD_CONF,       ONLY : LCARTESIAN, CPROGRAM
+USE MODD_TIME_n,     ONLY : TDTCUR
+USE MODD_RADIATIONS_n,   ONLY : XFLALWD, XCCO2, XTSIDER, &
+                                XSW_BANDS, XDIRSRFSWD, XSCAFLASWD, &
+                                XZENITH, XAZIM, XAER
+USE MODD_NSV
+USE MODD_GRID,       ONLY : XLON0, XRPK, XBETA
+USE MODD_PARAM_ICE,  ONLY : LSEDIC
+USE MODD_PARAM_C2R2, ONLY : LSEDC
+USE MODD_DIAG_IN_RUN
+USE MODD_DUST,       ONLY : LDUST, CDUSTNAMES
+USE MODD_SALT,       ONLY : LSALT, CSALTNAMES
+USE MODD_CH_AEROSOL
+USE MODD_CSTS_DUST
+USE MODD_CSTS_SALT
+!
+USE MODI_NORMAL_INTERPOL
+USE MODI_ROTATE_WIND
+USE MODI_SHUMAN
+USE MODI_MNHGET_SURF_PARAM_n
+USE MODI_COUPLING_SURF_ATM_n
+USE MODI_DIAG_SURF_ATM_n
+USE MODD_MNH_SURFEX_n
+!
+USE MODE_ll
+USE MODD_ARGSLIST_ll, ONLY : LIST_ll
+#ifdef MNH_FOREFIRE
+!** MODULES FOR FOREFIRE **!
+USE MODD_FOREFIRE
+USE MODD_FOREFIRE_n
+USE MODI_COUPLING_FOREFIRE_n
+#endif
+!
+USE MODD_TIME_n
+USE MODD_TIME
+USE MODI_TEMPORAL_DIST
+!
+IMPLICIT NONE
+!
+!
+!
+!*      0.1    declarations of arguments
+!
+!* surface fluxes
+!  --------------
+!
+REAL, DIMENSION(:,:), INTENT(OUT) :: PSFTH ! surface flux of potential temperature (Km/s)
+REAL, DIMENSION(:,:), INTENT(OUT) :: PSFRV ! surface flux of water vapor           (m/s*kg/kg)
+REAL, DIMENSION(:,:,:),INTENT(OUT):: PSFSV ! surface flux of scalar                (m/s*kg/kg)
+                                           ! flux of chemical var.                 (ppp.m/s)
+REAL, DIMENSION(:,:), INTENT(OUT) :: PSFCO2! surface flux of CO2                   (m/s*kg/kg)
+REAL, DIMENSION(:,:), INTENT(OUT) :: PSFU  ! surface fluxes of horizontal   
+REAL, DIMENSION(:,:), INTENT(OUT) :: PSFV  ! momentum in x and y directions        (m2/s2)
+!
+!* Radiative parameters
+!  --------------------
+!
+REAL, DIMENSION(:,:,:), INTENT(OUT) :: PDIR_ALB  ! direct  albedo for each spectral band (-)
+REAL, DIMENSION(:,:,:), INTENT(OUT) :: PSCA_ALB  ! diffuse albedo for each spectral band (-)
+REAL, DIMENSION(:,:),   INTENT(OUT) :: PEMIS     ! surface emissivity                    (-)
+REAL, DIMENSION(:,:),   INTENT(OUT) :: PTSRAD    ! surface radiative temperature         (K)
+!
+!
+!-------------------------------------------------------------------------------
+!
+!
+!
+!*      0.2    declarations of local variables
+!              -------------------------------
+!
+!
+!* Atmospheric variables
+!  ---------------------
+!
+REAL, DIMENSION(:,:,:), ALLOCATABLE         :: ZRV    ! vapor mixing ratio
+!
+!            suffix 'A' stands for atmospheric variable at first model level
+!
+REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2))  :: ZZREF  ! Forcing height
+REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2))  :: ZTA    ! Temperature
+REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2))  :: ZRVA   ! vapor mixing ratio
+REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2))  :: ZQA    ! humidity (kg/m3)
+REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2))  :: ZPA    ! Pressure
+REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2))  :: ZPS    ! Pressure
+REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2))  :: ZEXNA  ! Exner function
+REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2))  :: ZEXNS  ! Exner function
+REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2))  :: ZTHA   ! potential temperature
+REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2))  :: ZRAIN  ! liquid precipitation (kg/m2/s)
+REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2))  :: ZSNOW  ! solid precipitation  (kg/m2/s)
+REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2))  :: ZTSUN  ! solar time           (s since midnight)
+!
+REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2))  :: ZUA    ! u component of the wind
+!                                                       ! parallel to the orography
+REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2))  :: ZVA    ! v component of the wind
+!                                                       ! parallel to the orography
+REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2))  :: ZU     ! zonal wind
+REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2))  :: ZV     ! meridian wind
+REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2))  :: ZWIND  ! wind parallel to the orography
+REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2))  :: ZRHOA  ! air density
+REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2))  :: ZDIR   ! wind direction (rad from N clockwise)
+REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2))  :: ZSFU   ! zonal momentum flux
+REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2))  :: ZSFV   ! meridian momentum flux
+REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2))  :: ZCO2   ! CO2 concentration (kg/kg)
+REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2))  :: ZALFA  ! angle between the wind
+!                                                       ! and the x axis
+REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2),1):: ZU2D   ! u and v component of the
+REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2),1):: ZV2D   ! wind at mass point
+REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2))  :: ZSFTH  ! Turbulent flux of heat
+REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2))  :: ZSFTQ  ! Turbulent flux of water
+REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2))  :: ZSFCO2 ! Turbulent flux of CO2
+REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2),NSV):: ZSFTS! Turbulent flux of scalar
+
+!
+!* Dimensions
+!  ----------
+!
+INTEGER :: IIB  ! physical boundary
+INTEGER :: IIE  ! physical boundary
+INTEGER :: IJB  ! physical boundary
+INTEGER :: IJE  ! physical boundary
+INTEGER :: IKB  ! physical boundary
+INTEGER :: IKE  ! physical boundary
+INTEGER :: IKU  ! vertical array sizes
+!
+INTEGER :: JLAYER ! loop counter
+INTEGER :: JSV    ! loop counter
+INTEGER :: JI,JJ,JK ! loop index
+!
+INTEGER :: IDIM1 ! X physical dimension
+INTEGER :: IDIM2 ! Y physical dimension
+INTEGER :: IDIM1D! total physical dimension
+INTEGER :: IKRAD
+!
+!* Arrays put in 1D vectors
+!  ------------------------
+!
+REAL, DIMENSION(:),   ALLOCATABLE :: ZP_TSUN     ! solar time
+REAL, DIMENSION(:),   ALLOCATABLE :: ZP_ZENITH   ! zenithal angle
+REAL, DIMENSION(:),   ALLOCATABLE :: ZP_AZIM     ! azimuthal angle
+REAL, DIMENSION(:),   ALLOCATABLE :: ZP_ZREF     ! forcing height
+REAL, DIMENSION(:),   ALLOCATABLE :: ZP_ZS       ! orography
+REAL, DIMENSION(:),   ALLOCATABLE :: ZP_U        ! zonal wind
+REAL, DIMENSION(:),   ALLOCATABLE :: ZP_V        ! meridian wind
+REAL, DIMENSION(:),   ALLOCATABLE :: ZP_QA       ! air humidity  (kg/m3)
+REAL, DIMENSION(:),   ALLOCATABLE :: ZP_TA       ! air temperature
+REAL, DIMENSION(:),   ALLOCATABLE :: ZP_RHOA     ! air density
+REAL, DIMENSION(:,:), ALLOCATABLE :: ZP_SV       ! scalar at first atmospheric level
+REAL, DIMENSION(:),   ALLOCATABLE :: ZP_CO2      ! air CO2 concentration
+REAL, DIMENSION(:),   ALLOCATABLE :: ZP_RAIN     ! liquid precipitation
+REAL, DIMENSION(:),   ALLOCATABLE :: ZP_SNOW     ! solid precipitation
+REAL, DIMENSION(:),   ALLOCATABLE :: ZP_LW       ! incoming longwave
+REAL, DIMENSION(:,:), ALLOCATABLE :: ZP_DIR_SW   ! direct incoming shortwave
+REAL, DIMENSION(:,:), ALLOCATABLE :: ZP_SCA_SW   ! diffuse incoming shortwave
+REAL, DIMENSION(:),   ALLOCATABLE :: ZP_PS       ! surface pressure
+REAL, DIMENSION(:),   ALLOCATABLE :: ZP_PA       ! pressure at first atmospheric level
+
+REAL, DIMENSION(:),   ALLOCATABLE :: ZP_SFTQ     ! water vapor flux
+REAL, DIMENSION(:),   ALLOCATABLE :: ZP_SFTH     ! potential temperature flux
+REAL, DIMENSION(:,:), ALLOCATABLE :: ZP_SFTS     ! scalar flux
+REAL, DIMENSION(:),   ALLOCATABLE :: ZP_SFCO2    ! CO2 flux
+REAL, DIMENSION(:),   ALLOCATABLE :: ZP_SFU      ! zonal momentum flux
+REAL, DIMENSION(:),   ALLOCATABLE :: ZP_SFV      ! meridian momentum flux
+REAL, DIMENSION(:),   ALLOCATABLE :: ZP_TSRAD    ! radiative surface temperature
+REAL, DIMENSION(:,:), ALLOCATABLE :: ZP_DIR_ALB  ! direct albedo
+REAL, DIMENSION(:,:), ALLOCATABLE :: ZP_SCA_ALB  ! diffuse albedo
+REAL, DIMENSION(:),   ALLOCATABLE :: ZP_EMIS     ! emissivity
+
+REAL, DIMENSION(:),   ALLOCATABLE :: ZP_TSURF
+REAL, DIMENSION(:),   ALLOCATABLE :: ZP_Z0
+REAL, DIMENSION(:),   ALLOCATABLE :: ZP_Z0H
+REAL, DIMENSION(:),   ALLOCATABLE :: ZP_QSURF
+
+REAL, DIMENSION(:),   ALLOCATABLE :: ZP_PEW_A_COEF ! coefficients for
+REAL, DIMENSION(:),   ALLOCATABLE :: ZP_PEW_B_COEF ! implicit coupling
+REAL, DIMENSION(:),   ALLOCATABLE :: ZP_PET_A_COEF
+REAL, DIMENSION(:),   ALLOCATABLE :: ZP_PEQ_A_COEF
+REAL, DIMENSION(:),   ALLOCATABLE :: ZP_PET_B_COEF
+REAL, DIMENSION(:),   ALLOCATABLE :: ZP_PEQ_B_COEF
+REAL, DIMENSION(:),   ALLOCATABLE :: ZP_RN        ! net radiation           (W/m2)
+REAL, DIMENSION(:),   ALLOCATABLE :: ZP_H         ! sensible heat flux      (W/m2)
+REAL, DIMENSION(:),   ALLOCATABLE :: ZP_LE        ! latent heat flux        (W/m2)
+REAL, DIMENSION(:),   ALLOCATABLE :: ZP_GFLUX     ! ground flux             (W/m2)
+REAL, DIMENSION(:),   ALLOCATABLE :: ZP_T2M       ! Air temperature at 2 meters (K)
+REAL, DIMENSION(:),   ALLOCATABLE :: ZP_Q2M       ! Air humidity at 2 meters    (kg/kg)
+REAL, DIMENSION(:),   ALLOCATABLE :: ZP_HU2M      ! Air relative humidity at 2 meters (-)
+REAL, DIMENSION(:),   ALLOCATABLE :: ZP_ZON10M    ! zonal Wind at 10 meters     (m/s)
+REAL, DIMENSION(:),   ALLOCATABLE :: ZP_MER10M    ! meridian Wind at 10 meters  (m/s)
+TYPE(LIST_ll), POINTER            :: TZFIELDSURF_ll    ! list of fields to exchange
+INTEGER                           :: IINFO_ll       ! return code of parallel routine
+!
+REAL                              :: ZTIMEC
+!
+!-------------------------------------------------------------------------------
+!
+!
+IKB= 1+JPVEXT
+IKU=NKMAX + 2* JPVEXT
+IKE=IKU-JPVEXT
+!
+CALL GET_INDICE_ll (IIB,IJB,IIE,IJE)
+!
+PSFTH    = XUNDEF
+PSFRV    = XUNDEF
+PSFSV    = XUNDEF
+PSFCO2   = XUNDEF
+PSFU     = XUNDEF
+PSFV     = XUNDEF
+PDIR_ALB = XUNDEF
+PSCA_ALB = XUNDEF
+PEMIS    = XUNDEF
+PTSRAD   = XUNDEF
+!
+!
+!-------------------------------------------------------------------------------
+!
+!*       1.     CONVERSION OF THE ATMOSPHERIC VARIABLES
+!               --------------------------------------- 
+!
+!        1.1    water vapor
+!               -----------
+
+!
+ALLOCATE(ZRV(SIZE(PSFTH,1),SIZE(PSFTH,2),IKU))
+!
+IF(NRR>0) THEN
+  ZRV(:,:,:)=XRT(:,:,:,1)
+ELSE
+  ZRV(:,:,:)=0.
+END IF
+!
+!        1.2    Horizontal wind direction (rad from N clockwise)
+!               -------------------------
+!
+ZU2D(:,:,:)=MXF(XUT(:,:,IKB:IKB))
+ZV2D(:,:,:)=MYF(XVT(:,:,IKB:IKB))
+!
+!* angle between Y axis and wind (rad., clockwise)
+!
+ZALFA = 0.
+WHERE(ZU2D(:,:,1)/=0. .OR. ZV2D(:,:,1)/=0.)
+  ZALFA(:,:)=ATAN2(ZU2D(:,:,1),ZV2D(:,:,1))
+END WHERE
+WHERE(ZALFA(:,:)<0.) ZALFA(:,:) = ZALFA(:,:) + 2. * XPI
+!
+!* angle between North and wind (rad., clockwise)
+!
+IF (.NOT. LCARTESIAN) THEN
+  ZDIR =   ( (XRPK*(XLON(:,:)-XLON0)) - XBETA ) * XPI/180.  + ZALFA
+ELSE
+  ZDIR =                              - XBETA   * XPI/180.  + ZALFA
+END IF
+!
+!
+!        1.3    Rotate the wind
+!               ---------------
+!
+CALL ROTATE_WIND(XUT,XVT,XWT,           &
+     XDIRCOSXW, XDIRCOSYW, XDIRCOSZW,   &
+     XCOSSLOPE,XSINSLOPE,               &
+     XDXX,XDYY,XDZZ,                    &
+     ZUA,ZVA                            )
+
+!
+!        1.4    zonal and meridian components of the wind parallel to the slope
+!               ---------------------------------------------------------------
+!
+ZWIND(:,:) = SQRT( ZUA**2 + ZVA**2 )
+!
+ZU(:,:) = ZWIND(:,:) * SIN(ZDIR)
+ZV(:,:) = ZWIND(:,:) * COS(ZDIR)
+!
+!        1.5   Horizontal interpolation the thermodynamic fields
+!              -------------------------------------------------
+!
+CALL NORMAL_INTERPOL(XTHT,ZRV,XPABST,                    &
+     XDIRCOSXW, XDIRCOSYW, XDIRCOSZW,                    &
+     XCOSSLOPE,XSINSLOPE,                                &
+     XDXX,XDYY,XDZZ,                                     &
+     ZTHA,ZRVA,ZEXNA                                     )
+!
+DEALLOCATE(ZRV)
+!
+!
+!        1.6    Pressure and Exner function
+!               ---------------------------
+!
+!
+ZPA(:,:) = XP00 * ZEXNA(:,:) **(XCPD/XRD)
+!
+ZEXNS(:,:) = 0.5 * ( (XPABST(:,:,IKB-1)/XP00)**(XRD/XCPD)  &
+                    +(XPABST(:,:,IKB  )/XP00)**(XRD/XCPD)  &
+                   )
+ZPS(:,:) = XP00 * ZEXNS(:,:) **(XCPD/XRD)
+!
+!        1.7    humidity in kg/m3 from the mixing ratio
+!               ---------------------------------------
+!
+!
+ZQA(:,:) = ZRVA(:,:) * XRHODREF(:,:,IKB)
+!
+!
+!        1.8    Temperature from the potential temperature
+!               ------------------------------------------
+!
+!
+ZTA(:,:) = ZTHA(:,:) * ZEXNA(:,:)
+!
+!
+!        1.9    Air density
+!               -----------
+!
+ZRHOA(:,:) = ZPA(:,:)/(XRD * ZTA(:,:) * ((1. + (XRD/XRV)*ZRVA(:,:))/ &
+                                         (1. + ZRVA(:,:))))
+!
+!
+!        1.10   Precipitations
+!               --------------
+!
+ZRAIN=0.
+ZSNOW=0.
+IF (NRR>2 .AND. SIZE(XINPRR)>0 ) THEN
+  IF ((CCLOUD(1:3) == 'ICE' .AND. LSEDIC) .OR. &
+     ((CCLOUD == 'C2R2' .OR. CCLOUD == 'C3R5' .OR. CCLOUD == 'KHKO') .AND. LSEDC)) THEN
+    ZRAIN = ZRAIN + XINPRR * XRHOLW + XINPRC * XRHOLW
+  ELSE
+    ZRAIN = ZRAIN + XINPRR * XRHOLW
+  END IF
+END IF
+IF (CDCONV == 'KAFR')  THEN
+  ZRAIN = ZRAIN + (XPRCONV - XPRSCONV)  * XRHOLW
+  ZSNOW = ZSNOW + XPRSCONV * XRHOLW
+END IF
+IF( NRR    >= 5    .AND. SIZE(XINPRS)>0 ) ZSNOW = ZSNOW + XINPRS * XRHOLW
+IF( NRR    >= 6    .AND. SIZE(XINPRG)>0 ) ZSNOW = ZSNOW + XINPRG * XRHOLW
+IF( NRR    >= 7    .AND. SIZE(XINPRH)>0 ) ZSNOW = ZSNOW + XINPRH * XRHOLW
+!
+!
+!        1.11   Solar time
+!               ----------
+!
+IF (.NOT. LCARTESIAN) THEN
+  ZTSUN(:,:) = MOD(TDTCUR%TIME -XTSIDER*3600. +XLON(:,:)*240., XDAY)
+ELSE
+  ZTSUN(:,:) = MOD(TDTCUR%TIME -XTSIDER*3600. +XLON0    *240., XDAY)
+END IF
+!
+!        1.12   Forcing level
+!               -------------
+!
+ZZREF(:,:) = 0.5*( XZZ(:,:,IKB+1)-XZZ(:,:,IKB) )*XDIRCOSZW(:,:)
+!
+!
+!        1.13   CO2 concentration (kg/m3)
+!               -----------------
+!
+ZCO2(:,:) = XCCO2 * XRHODREF(:,:,IKB)
+!
+!-------------------------------------------------------------------------------
+!
+!*       2.     Call to surface monitor with 2D variables
+!               -----------------------------------------
+!
+!
+! initial values:
+!
+IDIM1       = IIE-IIB+1
+IDIM2       = IJE-IJB+1
+IDIM1D      = IDIM1*IDIM2
+!
+!
+! Transform 2D input fields into 1D:
+!
+CALL RESHAPE_SURF(IDIM1D)
+!
+! call to have the cumulated time since beginning of simulation
+!
+CALL TEMPORAL_DIST(TDTCUR%TDATE%YEAR,TDTCUR%TDATE%MONTH,               &
+                       TDTCUR%TDATE%DAY, TDTCUR%TIME,                      &
+                       TDTSEG%TDATE%YEAR,TDTSEG%TDATE%MONTH,               &
+                       TDTSEG%TDATE%DAY, TDTSEG%TIME,        &
+                       ZTIMEC)
+!
+#ifdef CPLOASIS
+IF ( MOD(ZTIMEC,1.0) .LE. 1E-2 .OR. (1.0 - MOD(ZTIMEC,1.0)) .LE. 1E-2 ) THEN
+  IF ( NINT(ZTIMEC-(XSEGLEN-XTSTEP)) .LT. 0 ) THEN
+    WRITE(NLUOUT,*) '----------------------------'
+    WRITE(NLUOUT,*) ' Reception des champs avec OASIS'
+    WRITE(NLUOUT,*) 'NINT(ZTIMEC)=', NINT(ZTIMEC)
+    CALL MNH_OASIS_RECV(CPROGRAM,IDIM1D,SIZE(XSW_BANDS),ZTIMEC+XTSTEP,XTSTEP,         &
+                        ZP_ZENITH,XSW_BANDS                                         ,         &
+                        ZP_TSRAD,ZP_DIR_ALB,ZP_SCA_ALB,ZP_EMIS,ZP_TSURF)
+    WRITE(NLUOUT,*) '----------------------------'
+  END IF
+ENDIF
+#endif
+!
+! Call to surface schemes
+!                       
+CALL COUPLING_SURF_ATM_n(YSURF_CUR,'MESONH', 'E',ZTIMEC,                                                   &
+               XTSTEP, TDTCUR%TDATE%YEAR, TDTCUR%TDATE%MONTH, TDTCUR%TDATE%DAY, TDTCUR%TIME,  &
+               IDIM1D,NSV,SIZE(XSW_BANDS),                                                    &
+               ZP_TSUN, ZP_ZENITH,ZP_ZENITH, ZP_AZIM,                                                   &
+               ZP_ZREF, ZP_ZREF, ZP_ZS, ZP_U, ZP_V, ZP_QA, ZP_TA, ZP_RHOA, ZP_SV, ZP_CO2, CSV,&
+               ZP_RAIN, ZP_SNOW, ZP_LW, ZP_DIR_SW, ZP_SCA_SW, XSW_BANDS, ZP_PS, ZP_PA,        &
+               ZP_SFTQ, ZP_SFTH, ZP_SFTS, ZP_SFCO2, ZP_SFU, ZP_SFV,                           &
+               ZP_TSRAD, ZP_DIR_ALB, ZP_SCA_ALB, ZP_EMIS, ZP_TSURF, ZP_Z0, ZP_Z0H, ZP_QSURF,  &
+               ZP_PEW_A_COEF, ZP_PEW_B_COEF,                                                  &
+               ZP_PET_A_COEF, ZP_PEQ_A_COEF, ZP_PET_B_COEF, ZP_PEQ_B_COEF,                    &
+               'OK'                                                                           )
+!
+#ifdef CPLOASIS
+IF ( MOD(ZTIMEC,1.0) .LE. 1E-2 .OR. (1.0 - MOD(ZTIMEC,1.0)) .LE. 1E-2 ) THEN
+  IF (NINT(ZTIMEC-(XSEGLEN-XTSTEP)) .LT. 0) THEN
+    WRITE(NLUOUT,*) '----------------------------'
+    WRITE(NLUOUT,*) ' Envoi des champs avec OASIS'
+    WRITE(NLUOUT,*) 'NINT(ZTIMEC)=', NINT(ZTIMEC)
+    CALL MNH_OASIS_SEND(CPROGRAM,IDIM1D,ZTIMEC+XTSTEP,XTSTEP)
+    WRITE(NLUOUT,*) '----------------------------'
+  END IF
+END IF
+#endif
+!
+IF (CPROGRAM=='DIAG  ' .OR. LDIAG_IN_RUN) THEN
+  CALL DIAG_SURF_ATM_n(YSURF_CUR%IM%DGEI, YSURF_CUR%FM%DGF, YSURF_CUR%DGL, YSURF_CUR%IM%DGI, &
+                             YSURF_CUR%SM%DGS, YSURF_CUR%DGU, YSURF_CUR%TM%DGT, YSURF_CUR%WM%DGW, &
+                             YSURF_CUR%U, YSURF_CUR%USS,'MESONH')
+  CALL  MNHGET_SURF_PARAM_n(PRN=ZP_RN,PH=ZP_H,PLE=ZP_LE,PGFLUX=ZP_GFLUX, &
+                           PT2M=ZP_T2M,PQ2M=ZP_Q2M,PHU2M=ZP_HU2M,        &
+                           PZON10M=ZP_ZON10M,PMER10M=ZP_MER10M           )
+END IF
+!
+! Transform 1D output fields into 2D:
+!
+CALL UNSHAPE_SURF(IDIM1,IDIM2)
+#ifdef MNH_FOREFIRE
+!------------------------!
+! COUPLING WITH FOREFIRE !
+!------------------------!
+	
+IF ( LFOREFIRE ) THEN
+	CALL FOREFIRE_DUMP_FIELDS_n(XUT, XVT, XWT, XSVT&
+	           , XTHT, XRT(:,:,:,1), XPABST, XTKET&
+	           , IDIM1+2, IDIM2+2, NKMAX+2)
+END IF
+
+IF ( FFCOUPLING ) THEN
+
+	CALL SEND_GROUND_WIND_n(XUT, XVT, IKB, IINFO_ll)
+	
+	CALL FOREFIRE_RECEIVE_PARAL_n()
+   
+   CALL COUPLING_FOREFIRE_n(XTSTEP, ZSFTH, ZSFTQ, ZSFTS)
+	
+	CALL FOREFIRE_SEND_PARAL_n(IINFO_ll)
+   
+END IF
+
+FF_TIME = FF_TIME + XTSTEP
+#endif
+!
+! Friction of components along slope axes (U: largest local slope axis, V: zero slope axis)
+!
+! 
+PSFU(:,:) = 0.
+PSFV(:,:) = 0.
+!
+WHERE (ZSFU(:,:)/=XUNDEF .AND. ZWIND(:,:)>0.)
+  PSFU(:,:) = - SQRT(ZSFU**2+ZSFV**2) * ZUA(:,:) / ZWIND(:,:) / XRHODREF(:,:,IKB)
+  PSFV(:,:) = - SQRT(ZSFU**2+ZSFV**2) * ZVA(:,:) / ZWIND(:,:) / XRHODREF(:,:,IKB)
+END WHERE
+!
+!* conversion from H (W/m2) to w'Theta'
+!
+PSFTH(:,:) = ZSFTH(:,:) /  XCPD / XRHODREF(:,:,IKB)
+!
+!
+!* conversion from water flux (kg/m2/s) to w'rv'
+!
+PSFRV(:,:) = ZSFTQ(:,:) / XRHODREF(:,:,IKB)
+!
+!
+!* conversion from scalar flux (kg/m2/s) to w'rsv'
+!
+IF(NSV .GT. 0) THEN
+   DO JSV=1,NSV
+     PSFSV(:,:,JSV) = ZSFTS(:,:,JSV) / XRHODREF(:,:,IKB)
+   END DO
+END IF
+!
+!* conversion from chemistry flux (molec/m2/s) to (ppp.m.s-1)
+!
+IF (LCH_SURFACE_FLUX) THEN
+  DO JSV=NSV_CHEMBEG,NSV_CHEMEND
+    PSFSV(:,:,JSV) = ZSFTS(:,:,JSV) * XMD / ( XAVOGADRO * XRHODREF(:,:,IKB)) 
+  END DO
+ELSE
+  PSFSV(:,:,NSV_CHEMBEG:NSV_CHEMEND) = 0.
+END IF
+!
+!* conversion from dust flux (kg/m2/s) to (ppp.m.s-1)
+!
+IF (LDUST) THEN
+  DO JSV=NSV_DSTBEG,NSV_DSTEND
+     PSFSV(:,:,JSV) = ZSFTS(:,:,JSV) * XMD / (XMOLARWEIGHT_DUST * XRHODREF(:,:,IKB))
+  END DO
+ELSE
+  PSFSV(:,:,NSV_DSTBEG:NSV_DSTEND) = 0.
+END IF
+!
+!* conversion from sea salt flux (kg/m2/s) to (ppp.m.s-1)
+!
+IF (LSALT) THEN
+  DO JSV=NSV_SLTBEG,NSV_SLTEND
+     PSFSV(:,:,JSV) = ZSFTS(:,:,JSV) * XMD / (XMOLARWEIGHT_SALT * XRHODREF(:,:,IKB))
+  END DO
+ELSE
+  PSFSV(:,:,NSV_SLTBEG:NSV_SLTEND) = 0.
+END IF
+!
+!* conversion from aerosol flux (molec/m2/s) to (ppp.m.s-1)
+!
+IF (LORILAM) THEN
+  DO JSV=NSV_AERBEG,NSV_AEREND
+    PSFSV(:,:,JSV) = ZSFTS(:,:,JSV) * XMD / ( XAVOGADRO * XRHODREF(:,:,IKB))
+  END DO
+ELSE
+  PSFSV(:,:,NSV_AERBEG:NSV_AEREND) = 0.
+END IF
+!
+!* conversion from CO2 flux (kg/m2/s) to w'CO2'
+!
+PSFCO2(:,:) = ZSFCO2(:,:) / XRHODREF(:,:,IKB)
+!
+!
+!*  Diagnostics
+!   -----------
+!
+!
+IF (LDIAG_IN_RUN) THEN
+  !
+  XCURRENT_LW   (:,:) = XFLALWD(:,:)
+  XCURRENT_SW   (:,:) = SUM(XDIRSRFSWD(:,:,:)+XSCAFLASWD(:,:,:),DIM=3)
+  XCURRENT_SFCO2(:,:) = ZSFCO2(:,:)
+  XCURRENT_DSTAOD(:,:)=0.0
+  IF (CRAD=='ECMW') THEN
+  DO JK=IKB,IKE
+    IKRAD = JK - 1 
+    DO JJ=IJB,IJE
+       DO JI=IIB,IIE
+         XCURRENT_DSTAOD(JI,JJ)=XCURRENT_DSTAOD(JI,JJ)+XAER(JI,JJ,IKRAD,3)
+       ENDDO
+    ENDDO
+  ENDDO
+  END IF
+!
+  NULLIFY(TZFIELDSURF_ll)
+  CALL ADD2DFIELD_ll(TZFIELDSURF_ll,XCURRENT_RN    )
+  CALL ADD2DFIELD_ll(TZFIELDSURF_ll,XCURRENT_H     )
+  CALL ADD2DFIELD_ll(TZFIELDSURF_ll,XCURRENT_LE    )
+  CALL ADD2DFIELD_ll(TZFIELDSURF_ll,XCURRENT_GFLUX )
+  CALL ADD2DFIELD_ll(TZFIELDSURF_ll,XCURRENT_SW    )
+  CALL ADD2DFIELD_ll(TZFIELDSURF_ll,XCURRENT_LW    )
+  CALL ADD2DFIELD_ll(TZFIELDSURF_ll,XCURRENT_T2M   )
+  CALL ADD2DFIELD_ll(TZFIELDSURF_ll,XCURRENT_Q2M   )
+  CALL ADD2DFIELD_ll(TZFIELDSURF_ll,XCURRENT_HU2M  )
+  CALL ADD2DFIELD_ll(TZFIELDSURF_ll,XCURRENT_ZON10M)
+  CALL ADD2DFIELD_ll(TZFIELDSURF_ll,XCURRENT_MER10M) 
+  CALL ADD2DFIELD_ll(TZFIELDSURF_ll,XCURRENT_DSTAOD)
+  CALL ADD2DFIELD_ll(TZFIELDSURF_ll,XCURRENT_SFCO2 )
+
+  CALL UPDATE_HALO_ll(TZFIELDSURF_ll,IINFO_ll)
+  CALL CLEANLIST_ll(TZFIELDSURF_ll)
+END IF
+!
+!==================================================================================
+!
+CONTAINS
+!
+!==================================================================================
+!
+SUBROUTINE RESHAPE_SURF(KDIM1D)
+!
+INTEGER, INTENT(IN)   :: KDIM1D
+INTEGER, DIMENSION(1) :: ISHAPE_1
+!
+ISHAPE_1 = (/KDIM1D/)
+!
+ALLOCATE(ZP_TSUN    (KDIM1D))
+ALLOCATE(ZP_ZENITH  (KDIM1D))
+ALLOCATE(ZP_AZIM    (KDIM1D))
+ALLOCATE(ZP_ZREF    (KDIM1D))
+ALLOCATE(ZP_ZS      (KDIM1D))
+ALLOCATE(ZP_U       (KDIM1D))
+ALLOCATE(ZP_V       (KDIM1D))
+ALLOCATE(ZP_QA      (KDIM1D))
+ALLOCATE(ZP_TA      (KDIM1D))
+ALLOCATE(ZP_RHOA    (KDIM1D))
+ALLOCATE(ZP_SV      (KDIM1D,NSV))
+ALLOCATE(ZP_CO2     (KDIM1D))
+ALLOCATE(ZP_RAIN    (KDIM1D))
+ALLOCATE(ZP_SNOW    (KDIM1D))
+ALLOCATE(ZP_LW      (KDIM1D))
+ALLOCATE(ZP_DIR_SW  (KDIM1D,SIZE(XDIRSRFSWD,3)))
+ALLOCATE(ZP_SCA_SW  (KDIM1D,SIZE(XSCAFLASWD,3)))
+ALLOCATE(ZP_PS      (KDIM1D))
+ALLOCATE(ZP_PA      (KDIM1D))
+
+ALLOCATE(ZP_SFTQ    (KDIM1D))
+ALLOCATE(ZP_SFTH    (KDIM1D))
+ALLOCATE(ZP_SFU     (KDIM1D))
+ALLOCATE(ZP_SFV     (KDIM1D))
+ALLOCATE(ZP_SFTS    (KDIM1D,NSV))
+ALLOCATE(ZP_SFCO2   (KDIM1D))
+ALLOCATE(ZP_TSRAD   (KDIM1D))
+ALLOCATE(ZP_DIR_ALB (KDIM1D,SIZE(PDIR_ALB,3)))
+ALLOCATE(ZP_SCA_ALB (KDIM1D,SIZE(PSCA_ALB,3)))
+ALLOCATE(ZP_EMIS    (KDIM1D))
+ALLOCATE(ZP_TSURF   (KDIM1D))
+ALLOCATE(ZP_Z0      (KDIM1D))
+ALLOCATE(ZP_Z0H     (KDIM1D))
+ALLOCATE(ZP_QSURF   (KDIM1D))
+ALLOCATE(ZP_RN      (KDIM1D))
+ALLOCATE(ZP_H       (KDIM1D))
+ALLOCATE(ZP_LE      (KDIM1D))
+ALLOCATE(ZP_GFLUX   (KDIM1D))
+ALLOCATE(ZP_T2M     (KDIM1D))
+ALLOCATE(ZP_Q2M     (KDIM1D))
+ALLOCATE(ZP_HU2M    (KDIM1D))
+ALLOCATE(ZP_ZON10M  (KDIM1D))
+ALLOCATE(ZP_MER10M  (KDIM1D))
+
+!* explicit coupling only
+ALLOCATE(ZP_PEW_A_COEF  (KDIM1D))
+ALLOCATE(ZP_PEW_B_COEF  (KDIM1D))
+ALLOCATE(ZP_PET_A_COEF  (KDIM1D))
+ALLOCATE(ZP_PEQ_A_COEF  (KDIM1D))
+ALLOCATE(ZP_PET_B_COEF  (KDIM1D))
+ALLOCATE(ZP_PEQ_B_COEF  (KDIM1D))
+
+ZP_TSUN(:)        = RESHAPE(ZTSUN(IIB:IIE,IJB:IJE),        ISHAPE_1)
+ZP_TA(:)          = RESHAPE(ZTA(IIB:IIE,IJB:IJE),          ISHAPE_1)
+ZP_QA(:)          = RESHAPE(ZQA(IIB:IIE,IJB:IJE),          ISHAPE_1)
+ZP_RHOA(:)        = RESHAPE(ZRHOA(IIB:IIE,IJB:IJE),        ISHAPE_1)
+ZP_U(:)           = RESHAPE(ZU(IIB:IIE,IJB:IJE),           ISHAPE_1)
+ZP_V(:)           = RESHAPE(ZV(IIB:IIE,IJB:IJE),           ISHAPE_1)
+ZP_PS(:)          = RESHAPE(ZPS(IIB:IIE,IJB:IJE),          ISHAPE_1)
+ZP_PA(:)          = RESHAPE(ZPA(IIB:IIE,IJB:IJE),          ISHAPE_1)
+ZP_ZS(:)          = RESHAPE(XZS(IIB:IIE,IJB:IJE),          ISHAPE_1)
+ZP_CO2(:)         = RESHAPE(ZCO2(IIB:IIE,IJB:IJE),         ISHAPE_1)
+ZP_SNOW(:)        = RESHAPE(ZSNOW(IIB:IIE,IJB:IJE),        ISHAPE_1)
+ZP_RAIN(:)        = RESHAPE(ZRAIN(IIB:IIE,IJB:IJE),        ISHAPE_1)
+ZP_ZREF(:)        = RESHAPE(ZZREF(IIB:IIE,IJB:IJE),        ISHAPE_1)
+
+DO JLAYER=1,NSV
+  ZP_SV(:,JLAYER) = RESHAPE(XSVT(IIB:IIE,IJB:IJE,IKB,JLAYER), ISHAPE_1)
+END DO
+!
+!chemical conversion : from part/part to molec./m3
+DO JLAYER=NSV_CHEMBEG,NSV_CHEMEND
+  ZP_SV(:,JLAYER) = ZP_SV(:,JLAYER) * XAVOGADRO * ZP_RHOA(:) / XMD
+END DO
+DO JLAYER=NSV_AERBEG,NSV_AEREND
+  ZP_SV(:,JLAYER) = ZP_SV(:,JLAYER) * XAVOGADRO * ZP_RHOA(:) / XMD
+END DO
+!dust  conversion : from part/part to kg/m3
+DO JLAYER=NSV_DSTBEG,NSV_DSTEND
+ ZP_SV(:,JLAYER) = ZP_SV(:,JLAYER) *  XMOLARWEIGHT_DUST* ZP_RHOA(:) / XMD
+END DO
+!sea salt  conversion : from part/part to kg/m3
+DO JLAYER=NSV_SLTBEG,NSV_SLTEND
+ ZP_SV(:,JLAYER) = ZP_SV(:,JLAYER) *  XMOLARWEIGHT_SALT* ZP_RHOA(:) / XMD
+END DO
+!
+ZP_ZENITH(:)      = RESHAPE(XZENITH(IIB:IIE,IJB:IJE),      ISHAPE_1)
+ZP_AZIM  (:)      = RESHAPE(XAZIM  (IIB:IIE,IJB:IJE),      ISHAPE_1)
+ZP_LW(:)          = RESHAPE(XFLALWD(IIB:IIE,IJB:IJE),      ISHAPE_1)
+DO JLAYER=1,SIZE(XDIRSRFSWD,3)
+  ZP_DIR_SW(:,JLAYER)  = RESHAPE(XDIRSRFSWD(IIB:IIE,IJB:IJE,JLAYER),  ISHAPE_1)
+  ZP_SCA_SW(:,JLAYER)  = RESHAPE(XSCAFLASWD(IIB:IIE,IJB:IJE,JLAYER),  ISHAPE_1)
+END DO
+!
+ZP_PEW_A_COEF = 0.
+ZP_PEW_B_COEF = 0.
+ZP_PET_A_COEF = 0.
+ZP_PEQ_A_COEF = 0.
+ZP_PET_B_COEF = 0.
+ZP_PEQ_B_COEF = 0.
+!
+END SUBROUTINE RESHAPE_SURF
+!================================================i=================================
+SUBROUTINE UNSHAPE_SURF(KDIM1,KDIM2)
+!
+INTEGER, INTENT(IN)   :: KDIM1, KDIM2
+INTEGER, DIMENSION(2) :: ISHAPE_2
+!
+ISHAPE_2 = (/KDIM1,KDIM2/)
+!
+! Arguments in call to surface:
+!
+ZSFTH = XUNDEF
+ZSFTQ = XUNDEF
+IF (NSV>0) ZSFTS = XUNDEF
+ZSFCO2 = XUNDEF
+ZSFU = XUNDEF
+ZSFV = XUNDEF
+!
+ZSFTH   (IIB:IIE,IJB:IJE)       = RESHAPE(ZP_SFTH(:),       ISHAPE_2)
+ZSFTQ   (IIB:IIE,IJB:IJE)       = RESHAPE(ZP_SFTQ(:),       ISHAPE_2)
+DO JLAYER=1,SIZE(PSFSV,3)
+  ZSFTS   (IIB:IIE,IJB:IJE,JLAYER) = RESHAPE(ZP_SFTS(:,JLAYER),  ISHAPE_2)
+END DO
+ZSFCO2  (IIB:IIE,IJB:IJE)       = RESHAPE(ZP_SFCO2(:),    ISHAPE_2)
+ZSFU    (IIB:IIE,IJB:IJE)       = RESHAPE(ZP_SFU(:),      ISHAPE_2)
+ZSFV    (IIB:IIE,IJB:IJE)       = RESHAPE(ZP_SFV(:),      ISHAPE_2)
+PEMIS   (IIB:IIE,IJB:IJE)       = RESHAPE(ZP_EMIS(:),     ISHAPE_2)
+PTSRAD  (IIB:IIE,IJB:IJE)       = RESHAPE(ZP_TSRAD(:),    ISHAPE_2)
+!
+IF (LDIAG_IN_RUN) THEN
+  XCURRENT_RN      (IIB:IIE,IJB:IJE)  = RESHAPE(ZP_RN(:),     ISHAPE_2)
+  XCURRENT_H       (IIB:IIE,IJB:IJE)  = RESHAPE(ZP_H (:),     ISHAPE_2)
+  XCURRENT_LE      (IIB:IIE,IJB:IJE)  = RESHAPE(ZP_LE(:),     ISHAPE_2)
+  XCURRENT_GFLUX   (IIB:IIE,IJB:IJE)  = RESHAPE(ZP_GFLUX(:),  ISHAPE_2)
+  XCURRENT_T2M     (IIB:IIE,IJB:IJE)  = RESHAPE(ZP_T2M(:),    ISHAPE_2)
+  XCURRENT_Q2M     (IIB:IIE,IJB:IJE)  = RESHAPE(ZP_Q2M(:),    ISHAPE_2)
+  XCURRENT_HU2M    (IIB:IIE,IJB:IJE)  = RESHAPE(ZP_HU2M(:),   ISHAPE_2)
+  XCURRENT_ZON10M  (IIB:IIE,IJB:IJE)  = RESHAPE(ZP_ZON10M(:), ISHAPE_2)
+  XCURRENT_MER10M  (IIB:IIE,IJB:IJE)  = RESHAPE(ZP_MER10M(:), ISHAPE_2)
+ENDIF
+!
+DO JLAYER=1,SIZE(PDIR_ALB,3)
+  PDIR_ALB(IIB:IIE,IJB:IJE,JLAYER) = RESHAPE(ZP_DIR_ALB(:,JLAYER), ISHAPE_2)
+  PSCA_ALB(IIB:IIE,IJB:IJE,JLAYER) = RESHAPE(ZP_SCA_ALB(:,JLAYER), ISHAPE_2)
+END DO
+!
+DEALLOCATE(ZP_TSUN    )
+DEALLOCATE(ZP_ZENITH  )
+DEALLOCATE(ZP_AZIM    )
+DEALLOCATE(ZP_ZREF    )
+DEALLOCATE(ZP_ZS      )
+DEALLOCATE(ZP_U       )
+DEALLOCATE(ZP_V       )
+DEALLOCATE(ZP_QA      )
+DEALLOCATE(ZP_TA      )
+DEALLOCATE(ZP_RHOA    )
+DEALLOCATE(ZP_SV      )
+DEALLOCATE(ZP_CO2     )
+DEALLOCATE(ZP_RAIN    )
+DEALLOCATE(ZP_SNOW    )
+DEALLOCATE(ZP_LW      )
+DEALLOCATE(ZP_DIR_SW  )
+DEALLOCATE(ZP_SCA_SW  )
+DEALLOCATE(ZP_PS      )
+DEALLOCATE(ZP_PA      )
+
+DEALLOCATE(ZP_SFTQ    )
+DEALLOCATE(ZP_SFTH    )
+DEALLOCATE(ZP_SFTS    )
+DEALLOCATE(ZP_SFCO2   )
+DEALLOCATE(ZP_SFU     )
+DEALLOCATE(ZP_SFV     )
+DEALLOCATE(ZP_TSRAD   )
+DEALLOCATE(ZP_DIR_ALB )
+DEALLOCATE(ZP_SCA_ALB )
+DEALLOCATE(ZP_EMIS    )
+DEALLOCATE(ZP_RN      )
+DEALLOCATE(ZP_H       )
+DEALLOCATE(ZP_LE      )
+DEALLOCATE(ZP_GFLUX   )
+DEALLOCATE(ZP_T2M     )
+DEALLOCATE(ZP_Q2M     )
+DEALLOCATE(ZP_HU2M     )
+DEALLOCATE(ZP_ZON10M  )
+DEALLOCATE(ZP_MER10M  )
+
+DEALLOCATE(ZP_PEW_A_COEF  )
+DEALLOCATE(ZP_PEW_B_COEF  )
+DEALLOCATE(ZP_PET_A_COEF  )
+DEALLOCATE(ZP_PEQ_A_COEF  )
+DEALLOCATE(ZP_PET_B_COEF  )
+DEALLOCATE(ZP_PEQ_B_COEF  )
+!
+END SUBROUTINE UNSHAPE_SURF
+!==================================================================================
+!
+END SUBROUTINE GROUND_PARAM_n
diff --git a/src/ARCH_SRC/CPL_WAVE/MNH/ini_modeln.f90 b/src/ARCH_SRC/CPL_WAVE/MNH/ini_modeln.f90
new file mode 100644
index 0000000000000000000000000000000000000000..488502ea3522b5de75249cd979d8aef5b658d078
--- /dev/null
+++ b/src/ARCH_SRC/CPL_WAVE/MNH/ini_modeln.f90
@@ -0,0 +1,2144 @@
+!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC for details. version 1.
+! $Source$ $Revision$ $Date$
+!-----------------------------------------------------------------
+!     #######################
+      MODULE MODI_INI_MODEL_n
+!     #######################
+!
+INTERFACE
+!
+       SUBROUTINE INI_MODEL_n(KMI,HLUOUT,HINIFILE,HINIFILEPGD)
+!
+       INTEGER, INTENT(IN)              :: KMI      ! Model index 
+       CHARACTER (LEN=*), INTENT(IN)    :: HLUOUT   ! name for output-listing
+       !  of nested models
+       CHARACTER (LEN=28), INTENT(IN)   :: HINIFILE ! name of
+       CHARACTER (LEN=28), INTENT(IN)   :: HINIFILEPGD
+!
+END SUBROUTINE INI_MODEL_n
+!
+END INTERFACE
+!
+END MODULE MODI_INI_MODEL_n
+!     ######################################################
+      SUBROUTINE INI_MODEL_n(KMI,HLUOUT,HINIFILE,HINIFILEPGD)
+!     ######################################################
+!
+!!****  *INI_MODEL_n* - routine to initialize the nested model _n
+!!
+!!    PURPOSE
+!!    -------
+!       The purpose of this routine is to initialize the variables
+!     of the nested model _n.
+!
+!!**  METHOD
+!!    ------
+!!      The initialization of the model _n is performed as follows :
+!!       - Memory for arrays are then allocated :
+!!            * If  turbulence kinetic energy variable is not needed
+!!    (CTURB='NONE'),  XTKET, XTKEM and XTKES are zero-size arrays.
+!!            * If  dissipation of TKE variable is not needed
+!!    (CTURBLEN /='KEPS'),  XEPST, XEPSM and XREPSS are zero-size arrays.
+!!            * Memory for mixing ratio arrays is allocated according to the
+!!     value of logicals LUSERn (the number NRR of moist variables is deduced).
+!!            * The latitude (XLAT), longitude (XLON) and map factor (XMAP)
+!!     arrays are zero-size arrays if Cartesian geometry (LCARTESIAN=.TRUE.)
+!!            * Memory for reference state without orography ( XRHODREFZ and
+!!     XTHVREFZ) is only allocated in INI_MODEL1
+!!            * The horizontal Coriolis parameters (XCORIOX and XCORIOY) arrays
+!!     are  zero-size arrays if thinshell approximation (LTHINSHELL=.TRUE.)
+!!            * The Curvature coefficients (XCURVX and XCURVY) arrays
+!!     are zero-size arrays if Cartesian geometry (LCARTESIAN=.TRUE.)
+!!            * Memory for the Jacobian (ZJ) local array is allocated
+!!     (This variable is computed in SET_GRID and used in SET_REF).
+!!       - The spatial and temporal grid variables are initialized by SET_GRID.
+!!       - The metric coefficients are computed by METRICS (they are using in
+!!     the SET-REF call).
+!!       - The prognostic variables and are read in initial
+!!    LFIFM file (in READ_FIELD)
+!!       - The reference state variables  are initialized by SET_REF.
+!!       - The temporal indexes of the outputs are computed by SET_OUTPUT_TIMES
+!!       - The large scale sources are computed in case of coupling case by
+!!    INI_CPL.
+!!       - The initialization of the parameters needed for the dynamics
+!!         of the model n is realized in INI_DYNAMICS.
+!!       - Then the initial file (DESFM+LFIFM files) is closed by FMCLOS.
+!!       - The initialization of the parameters needed for the ECMWF radiation
+!!         code is realized in INI_RADIATIONS.
+!!       - The contents of the scalar variables are overwritten by
+!!         the chemistry initialization subroutine CH_INIT_FIELDn when
+!!         the flags LUSECHEM and LCH_INIT_FIELD are set to TRUE.
+!!         This allows easy initialization of the chemical fields at a
+!!         restart of the model.
+!!
+!!    EXTERNAL
+!!    --------
+!!      FMLOOK      : to retrieve a logical unit number associated with a file
+!!      FMREAD      : to read a LFIFM file
+!!      FMFREE      : to release a logical unit number
+!!      SET_DIM     : to initialize dimensions
+!!      SET_GRID    : to initialize grid
+!!      METRICS     : to compute metric coefficients
+!!      READ_FIELD  : to initialize field
+!!      FMCLOS      : to close a FM-file
+!!      SET_REF     : to initialize reference state for anelastic approximation
+!!      INI_DYNAMICS: to initialize parameters for the dynamics
+!!      INI_TKE_EPS : to initialize the TKE 
+!!      SET_DIRCOS  : to compute the director cosinus of the orography
+!!      INI_RADIATIONS : to initialize radiation computations
+!!      CH_INIT_CCS: to initialize the chemical core system
+!!      CH_INIT_FIELDn: to (re)initialize the scalar variables
+!!      INI_DEEP_CONVECTION : to initialize the deep convection scheme
+!!      CLEANLIST_ll : deaalocate a list
+!!
+!!    IMPLICIT ARGUMENTS
+!!    ------------------
+!!
+!!      Module MODD_PARAMETERS : contains declaration of parameter variables
+!!         JPHEXT : Horizontal external points number
+!!         JPVEXT : Vertical external points number
+!!
+!!      Module MODD_MODD_DYN   : contains declaration of parameters
+!!                               for the dynamics
+!!      Module MODD_CONF       : contains declaration of configuration variables
+!!                               for all models
+!!         NMODEL     : Number of nested models
+!!         NVERB      : Level of informations on output-listing
+!!                          0 for minimum  prints
+!!                          5 for intermediate level of prints
+!!                         10 for maximum  prints
+!!
+!!      Module MODD_REF        : contains declaration of reference state
+!!                               variables for all models
+!!      Module MODD_FIELD_n    : contains declaration of prognostic fields
+!!      Module MODD_LSFIELD_n  : contains declaration of Larger Scale fields
+!!      Module MODD_GRID_n     : contains declaration of spatial grid variables
+!!      Module MODD_TIME_n     : contains declaration of temporal grid variables
+!!      Module MODD_REF_n      : contains declaration of reference state
+!!                               variables
+!!      Module MODD_CURVCOR_n  : contains declaration of curvature and Coriolis
+!!                               variables
+!!      Module MODD_BUDGET     : contains declarations of the budget parameters
+!!      Module MODD_RADIATIONS_n:contains declaration of the variables of the
+!!                               radiation interface scheme
+!!      Module MODD_STAND_ATM  : contains declaration of the 5 standard
+!!                               atmospheres used for the ECMWF-radiation code
+!!      Module MODD_FRC        : contains declaration of the control variables
+!!                               and of the forcing fields
+!!      Module MODD_CH_MNHC_n   : contains the control parameters for chemistry
+!!      Module MODD_DEEP_CONVECTION_n: contains declaration of the variables of
+!!                                     the deep convection scheme
+!!        
+!!        
+!!        
+!!        
+!!      Module MODN_CONF_n     : contains declaration of namelist NAM_CONFn and 
+!!                             uses module MODD_CONF_n (configuration variables)
+!!      Module MODN_LUNIT_n    : contains declaration of namelist NAM_LUNITn and
+!!                             uses module MODD_LUNIT_n (Logical units)
+!!      Module MODN_DYN_n      : contains declaration of namelist NAM_DYNn and
+!!                             uses module MODD_DYN_n (control of dynamics)
+!!      Module MODN_PARAM_n    : contains declaration of namelist NAM_PARAMn and
+!!                             uses module MODD_PARAM_n (control of physical
+!!                             parameterization)
+!!      Module MODN_LBC_n      : contains declaration of namelist NAM_LBCn and 
+!!                             uses module MODD_LBC_n (lateral boundaries)
+!!      Module MODN_TURB_n     : contains declaration of namelist NAM_TURBn and 
+!!                             uses module MODD_TURB_n (turbulence scheme)
+!!      Module MODN_PARAM_RAD_n: contains declaration of namelist NAM_PARAM_RADn
+!!
+!!    REFERENCE
+!!    ---------
+!!      Book2 of documentation (routine INI_MODEL_n)
+!!      
+!!
+!!    AUTHOR
+!!    ------
+!!      V. Ducrocq       * Meteo France *
+!!
+!!    MODIFICATIONS
+!!    -------------
+!!      Original     10/06/94
+!!      Modification 17/10/94  (Stein)  For LCORIO
+!!      Modification 20/10/94  (Stein)  For SET_GRID and NAMOUTN
+!!      Modification 26/10/94  (Stein)  Modifications of the namelist names
+!!      Modification 10/11/94  (Lafore) allocatation of tke fields
+!!      Modification 22/11/94  (Stein)  change the READ_FIELDS call ( add
+!!                                      pressure function
+!!      Modification 06/12/94  (Stein)  add the LS fields
+!!                   12/12/94  (Stein)  rename END_INI in INI_DYNAMICS
+!!      Modification 09/01/95  (Stein)  add the turbulence scheme
+!!      Modification Jan 19, 1995 (J. Cuxart) add the TKE initialization
+!!                   Jan 23, 1995 (J. Stein ) remove the condition
+!!                             LTHINSHELL=T LCARTESIAN=T => stop
+!!      Modification Feb 16, 1995 (I.Mallet) add the METRICS call and
+!!                                      change the SET_REF call (add
+!!                                      the lineic mass)
+!!      Modification Mar 10, 1995 (I. Mallet) add the COUPLING initialization
+!!                   June 29,1995 (Ph. Hereil, J. Stein) add the budget init.
+!!      Modification Sept. 1, 1995 (S. Belair) Reading of the surface variables
+!!                                 and parameters for ISBA (i.e., add a
+!!                                 CALL READ_GR_FIELD)
+!!      Modification 18/08/95     (J.P.Lafore)   time step change case
+!!                   25/09/95     (J. Cuxart and J.Stein)   add LES variables
+!!                                and the diachronic file initialization
+!!      Modification Sept 20,1995 (Lafore) coupling for the dry mass Md
+!!      Modification Sept. 12, 1995 (J.-P. Pinty) add the initialization of
+!!                                      the ECMWF radiation code
+!!      Modification Sept. 13, 1995 (J.-P. Pinty) control the allocation of the
+!!                                      arrays of MODD_GR_FIELD_n
+!!      Modification Nove. 17, 1995 (J.Stein) control of the control !! 
+!!                   March 01, 1996 (J. Stein) add the cloud fraction    
+!!                   April 03, 1996 (J. Stein) unify the ISBA and TSZ0 cases
+!!      Modification 13/12/95 (M. Georgelin) add the forcing variables in
+!!                                           the call read_field, and their
+!!                                           allocation.
+!!                   Mai   23, 1996 (J. Stein) allocate XSEA in the TSZ0 case
+!!                   June  11, 1996 (V. Masson) add XSILT and XLAKE of
+!!                                              MODD_GR_FIELD_n
+!!                   August 7, 1996 (K. Suhre)  add (re)initialization of
+!!                                              chemistry
+!!                   Octo. 11, 1996 (J. Stein ) add XSRCT and XSRCM
+!!                   October 8, 1996 (J. Cuxart, E. Sanchez) Moist LES diagnostics
+!!                                     and control on TKE initialization.
+!!      Modification 19/12/96 (J.-P. Pinty) add the ice parameterization and
+!!                                          the precipitation fields
+!!      Modification 11/01/97 (J.-P. Pinty) add the deep convection
+!!                   Nov.   1, 1996 (V. Masson) Read the vertical grid kind
+!!                   Nov.  20, 1996 (V. Masson) control of convection calling time
+!!                   July  16, 1996 (J.P.Lafore) update of EXSEG file reading
+!!                   Oct.  08, 1996 (J.P.Lafore, V.Masson)
+!!                                       MY_NAME and DAD_NAME reading and check
+!!                   Oct.  30, 1996 (J.P.Lafore) resolution ratio reading for nesting
+!!                                       and Bikhardt interpolation coef. initialization
+!!                   Nov.  22, 1996 (J.P.Lafore) allocation of LS sources for nesting
+!!                   Feb.  26, 1997 (J.P.Lafore) allocation of "surfacic" LS fields
+!!                   March 10, 1997 (J.P.Lafore) forcing only for model 1
+!!                   June  22, 1997 (J. Stein)   add the absolute pressure
+!!                   July  09, 1997 (V. Masson)  add directional z0 and SSO
+!!                   Aug.  18, 1997 (V. Masson)  consistency between storage
+!!                                               type and CCONF
+!!                   Dec.  22, 1997 (J. Stein)   add the LS field spawning
+!!                   Jan.  24, 1998 (P.Bechtold) change MODD_FRC and MODD_DEEP_CONVECTION
+!!                   Dec.  24, 1997 (V.Masson)   directional z0 parameters
+!!                   Aug.  13, 1998 (V. Ducrocq P Jabouille)   //
+!!                   Mai.  26, 1998 (J. Stein)   remove NXEND,NYEND
+!!                   Feb.   1, 1999 (J. Stein)   compute the Bikhardt
+!!                                       interpolation coeff. before the call to set_grid
+!!                   April  5, 1999 (V. Ducrocq) change the DXRATIO_ALL init.
+!!                   April  12, 1999 (J. Stein)  cleaning + INI_SPAWN_LS
+!!                   Apr.   7, 1999 (P Jabouille) store the metric coefficients
+!!                                                in modd_metrics_n
+!!                   Jui.   15,1999 (P Jabouille) split the routines in two parts
+!!                   Jan.   04,2000 (V. Masson)   removes the TSZ0 case
+!!                   Apr.   15,2000 (P Jabouille) parallelization of grid nesting
+!!                   Aug.   20,2000 (J Stein    ) tranpose XBFY
+!!                   Jui    01,2000 (F.solmon )   adapatation for patch approach
+!!                   Jun.   15,2000 (J.-P. Pinty) add C2R2 initialization
+!!                   Nov.  15,2000 (V.Masson) use of ini_modeln in prep_real_case
+!!                   Nov.  15,2000 (V.Masson) call of LES routines
+!!                   Nov.  15,2000 (V.Masson) aircraft and balloon initialization routines
+!!                   Jan.  22,2001 (D.Gazen) update_nsv set NSV_* var. for current model
+!!                   Mar.  04,2002 (V.Ducrocq) initialization to temporal series
+!!                   Mar.  15,2002 (F.Solmon) modification of ini_radiation interface
+!!                   Nov.  29,2002 (JP Pinty) add C3R5, ICE2, ICE4, ELEC
+!!                   Jan.  2004    (V.Masson) externalization of surface
+!!                   May   2006    Remove KEPS
+!!                   Apr.  2010    (M. Leriche) add pH for aqueous phase chemistry
+!!                   Jul.  2010    (M. Leriche) add Ice phase chemistry
+!!                   Oct.  2010  (J.Escobar) check if local domain not to small for NRIMX NRIMY
+!!                   Nov.  2010  (J.Escobar) PGI BUG , add SIZE(CSV) to init_ground routine
+!!                   Nov.  2009    (C. Barthe) add call to INI_ELEC_n
+!!                   Mar.  2010    (M. Chong) add small ions 
+!!                   Apr.  2011    (M. Chong) correction of RESTART (ELEC)
+!!                   June  2011  (B.Aouizerats) Prognostic aerosols
+!!                   June  2011  (P.Aumond) Drag of the vegetation  
+!!                                         + Mean fields
+!!                   July  2013  (Bosseur & Filippi) Adds Forefire
+!!       P. Tulet      Nov 2014 accumulated moles of aqueous species that fall at the surface   
+!!                   JAn.  2015  (F. Brosse) bug in allocate XACPRAQ
+!!                   Dec 2014 (C.Lac) : For reproducibility START/RESTA
+!!                   J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 
+!!       V. Masson     Feb 2015 replaces, for aerosols, cover fractions by sea, town, bare soil fractions
+!!                   J.Escobar : 19/04/2016 : Pb IOZ/NETCDF , missing OPARALLELIO=.FALSE. for PGD files
+!!                   Jun.  2016 (G.Delautier) phasage surfex 8
+!!                   Aug.  2016 (J.Pianezze) Add SFX_OASIS_READ_NAM function from SurfEx
+!---------------------------------------------------------------------------------
+!
+!*       0.    DECLARATIONS
+!              ------------
+!
+#ifdef CPLOASIS
+  USE MODI_SFX_OASIS_READ_NAM
+#endif
+!
+USE MODE_ll
+USE MODD_ARGSLIST_ll, ONLY : LIST_ll
+USE MODE_IO_ll
+USE MODE_FM
+USE MODE_FMREAD
+USE MODE_TYPE_ZDIFFU
+!
+USE MODD_NSV
+USE MODD_PARAMETERS
+USE MODD_CST
+USE MODD_CONF
+USE MODD_DUST
+USE MODD_DYN
+USE MODD_DYNZD
+USE MODD_FRC
+USE MODD_REF
+USE MODD_SERIES, ONLY: LSERIES
+USE MODD_TIME
+USE MODD_TURB_CLOUD, ONLY: NMODEL_CLOUD, CTURBLEN_CLOUD,XCEI
+USE MODD_NESTING
+USE MODD_PASPOL
+USE MODD_DRAGTREE
+USE MODD_METRICS_n
+USE MODD_DYN_n
+USE MODD_DYNZD_n
+USE MODD_FIELD_n
+USE MODD_PAST_FIELD_n
+USE MODD_MEAN_FIELD_n
+USE MODD_MEAN_FIELD
+USE MODD_ADV_n
+USE MODD_LSFIELD_n
+USE MODD_GRID_n
+USE MODD_GRID, ONLY: XLONORI,XLATORI
+USE MODD_TIME_n
+USE MODD_REF_n
+USE MODD_FRC_n
+USE MODD_CURVCOR_n
+USE MODD_DIM_n
+USE MODD_BUDGET
+USE MODD_RADIATIONS_n
+USE MODD_SHADOWS_n
+USE MODD_PARAM_RAD_n,   ONLY : CLW, CAER, CAOP     
+USE MODD_VAR_ll,        ONLY : IP
+!
+USE MODD_STAND_ATM,     ONLY : XSTROATM, XSMLSATM, XSMLWATM, XSPOSATM, XSPOWATM
+USE MODD_CH_MNHC_n, ONLY : LUSECHEM, LUSECHAQ, LUSECHIC, LCH_INIT_FIELD, &
+                           CCHEM_INPUT_FILE, LCH_CONV_LINOX,             &
+                           XCH_TUV_DOBNEW, LCH_PH
+USE MODD_CH_PH_n
+USE MODD_CH_AEROSOL, ONLY : LORILAM
+USE MODD_CH_AERO_n,  ONLY : XSOLORG,XMI
+USE MODD_PARAM_KAFR_n
+USE MODD_PARAM_MFSHALL_n
+USE MODD_DEEP_CONVECTION_n
+USE MODD_OUT_n
+USE MODD_BIKHARDT_n
+USE MODD_NUDGING_n, ONLY : LNUDGING
+USE MODD_DIAG_FLAG, ONLY : LCHEMDIAG
+USE MODD_CLOUD_MF_n
+USE MODD_NSV
+!
+USE MODD_ELEC_n, ONLY : XCION_POS_FW, XCION_NEG_FW
+
+USE MODD_LUNIT_n
+USE MODD_CONF_n
+USE MODD_GET_n
+USE MODD_TURB_n
+USE MODD_CTURB
+USE MODD_LBC_n
+USE MODD_PASPOL_n
+!
+!
+USE MODI_GATHER_ll
+USE MODI_INI_BUDGET
+USE MODI_INI_SW_SETUP
+USE MODI_SET_GRID
+USE MODI_METRICS
+USE MODI_UPDATE_METRICS
+USE MODI_READ_FIELD
+USE MODI_SET_REF
+USE MODI_INI_DYNAMICS
+USE MODI_INI_TKE_EPS
+USE MODI_SET_DIRCOS
+USE MODI_INI_CPL
+USE MODI_INI_RADIATIONS
+USE MODI_INI_RADIATIONS_ECMWF
+USE MODI_CH_INIT_FIELD_n
+USE MODI_INI_DEEP_CONVECTION
+USE MODI_INI_BIKHARDT_n
+USE MODI_INI_ONE_WAY_n
+USE MODI_GET_SIZEX_LB
+USE MODI_GET_SIZEY_LB
+USE MODI_INI_SPAWN_LS_n
+USE MODI_INI_AIRCRAFT_BALLOON
+USE MODI_UPDATE_NSV
+USE MODI_INI_ELEC_n
+USE MODI_INI_MICRO_n
+USE MODI_INI_LG
+USE MODI_SURF_SOLAR_GEOM
+USE MODI_SUNPOS_n
+USE MODI_INI_SURF_RAD
+USE MODI_MNHGET_SURF_PARAM_n
+USE MODI_MNHREAD_ZS_DUMMY_n
+USE MODI_INIT_GROUND_PARAM_n
+USE MODI_INI_AIRCRAFT_BALLOON
+USE MODI_INI_SURFSTATION_n
+USE MODI_INI_POSPROFILER_n
+USE MODI_CH_INIT_JVALUES
+USE MODI_CH_AER_MOD_INIT
+!
+USE MODD_PARAM_n
+USE MODE_MODELN_HANDLER
+USE MODE_SPLITTINGZ_ll , ONLY : GET_DIM_EXTZ_ll
+
+USE MODI_TEMPORAL_DIST
+
+USE MODI_INI_AEROSET1
+USE MODI_INI_AEROSET2
+USE MODI_INI_AEROSET3
+USE MODI_INI_AEROSET4
+USE MODI_INI_AEROSET5
+USE MODI_INI_AEROSET6
+!
+#ifdef MNH_FOREFIRE
+USE MODD_FOREFIRE
+USE MODD_FOREFIRE_n
+USE MODI_INIT_FOREFIRE_n
+#endif
+USE MODI_INI_LES_N
+USE MODD_MNH_SURFEX_n
+USE MODI_INI_SERIES_N
+! Eddy fluxes  ! Ajout PP
+USE MODD_DEF_EDDY_FLUX_n   ! for VT and WT fluxes
+USE MODD_DEF_EDDYUV_FLUX_n ! FOR UV
+USE MODD_LATZ_EDFLX
+USE MODD_ADVFRC_n
+USE MODD_RELFRC_n
+USE MODD_2D_FRC
+!
+USE MODE_MPPDB
+!
+IMPLICIT NONE
+!
+!*       0.1   declarations of arguments
+!
+!
+INTEGER, INTENT(IN)              :: KMI      ! Model Index 
+
+CHARACTER (LEN=*), INTENT(IN)    :: HLUOUT   ! name for output-listing
+                                             !  of nested models
+CHARACTER (LEN=28),  INTENT(IN)   :: HINIFILE ! name of
+                                             ! the initial file
+CHARACTER (LEN=28), INTENT(IN)   :: HINIFILEPGD       
+!
+!*       0.2   declarations of local variables
+!
+INTEGER             :: JSV     ! Loop index
+INTEGER             :: IRESP   ! Return code of FM routines
+INTEGER             :: ININAR  ! File management variable
+INTEGER             :: IMASDEV ! version of MESOHN in the input file
+INTEGER             :: ILUOUT  ! Logical unit number of output-listing
+CHARACTER(LEN=2)    :: YDIR   ! Type  of the data field in LFIFM file
+INTEGER             :: IGRID   ! C-grid indicator in LFIFM file
+INTEGER             :: ILENCH  ! Length of comment string in LFIFM file
+CHARACTER (LEN=100) :: YCOMMENT!comment string in LFIFM file
+CHARACTER (LEN=16)  :: YRECFM  ! Name of the desired field in LFIFM file
+INTEGER             :: IIU     ! Upper dimension in x direction (local)
+INTEGER             :: IJU     ! Upper dimension in y direction (local)
+INTEGER             :: IIU_ll  ! Upper dimension in x direction (global)
+INTEGER             :: IJU_ll  ! Upper dimension in y direction (global)
+INTEGER             :: IKU     ! Upper dimension in z direction
+REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZJ ! Jacobian
+LOGICAL             :: GINIDCONV ! logical switch for the deep convection
+                               ! initialization
+LOGICAL             :: GINIRAD ! logical switch for the radiation
+                               ! initialization
+!
+!
+TYPE(LIST_ll), POINTER :: TZINITHALO2D_ll ! pointer for the list of 2D fields
+                                      !  which must be communicated in INIT
+TYPE(LIST_ll), POINTER :: TZINITHALO3D_ll ! pointer for the list of 3D fields
+                                      !  which must be communicated in INIT
+!
+INTEGER :: IISIZEXF,IJSIZEXF,IISIZEXFU,IJSIZEXFU     ! dimensions of the
+INTEGER :: IISIZEX4,IJSIZEX4,IISIZEX2,IJSIZEX2       ! West-east LB arrays
+INTEGER :: IISIZEYF,IJSIZEYF,IISIZEYFV,IJSIZEYFV     ! dimensions of the
+INTEGER :: IISIZEY4,IJSIZEY4,IISIZEY2,IJSIZEY2       ! North-south LB arrays
+INTEGER :: IINFO_ll  ! Return code of //routines
+INTEGER :: IIY,IJY
+INTEGER :: IIU_B,IJU_B
+INTEGER :: IIU_SXP2_YP1_Z_ll,IJU_SXP2_YP1_Z_ll,IKU_SXP2_YP1_Z_ll
+!
+REAL, DIMENSION(:,:),   ALLOCATABLE :: ZCO2   ! CO2 concentration near the surface
+REAL, DIMENSION(:,:),   ALLOCATABLE :: ZSEA   ! sea fraction
+REAL, DIMENSION(:,:),   ALLOCATABLE :: ZTOWN  ! town fraction
+REAL, DIMENSION(:,:),   ALLOCATABLE :: ZBARE  ! bare soil fraction
+!
+REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZDIR_ALB ! direct albedo
+REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZSCA_ALB ! diffuse albedo
+REAL, DIMENSION(:,:),   ALLOCATABLE :: ZEMIS    ! emissivity
+REAL, DIMENSION(:,:),   ALLOCATABLE :: ZTSRAD   ! surface temperature
+!------------------------------------------
+! Dummy pointers needed to correct an ifort Bug
+REAL, DIMENSION(:), POINTER :: DPTR_XZHAT
+REAL, DIMENSION(:), POINTER :: DPTR_XBMX1,DPTR_XBMX2,DPTR_XBMX3,DPTR_XBMX4
+REAL, DIMENSION(:), POINTER :: DPTR_XBMY1,DPTR_XBMY2,DPTR_XBMY3,DPTR_XBMY4
+REAL, DIMENSION(:), POINTER :: DPTR_XBFX1,DPTR_XBFX2,DPTR_XBFX3,DPTR_XBFX4
+REAL, DIMENSION(:), POINTER :: DPTR_XBFY1,DPTR_XBFY2,DPTR_XBFY3,DPTR_XBFY4
+CHARACTER(LEN=4), DIMENSION(:), POINTER :: DPTR_CLBCX,DPTR_CLBCY
+INTEGER, DIMENSION(:,:,:), POINTER :: DPTR_NKLIN_LBXU,DPTR_NKLIN_LBYU,DPTR_NKLIN_LBXV,DPTR_NKLIN_LBYV
+INTEGER, DIMENSION(:,:,:), POINTER :: DPTR_NKLIN_LBXW,DPTR_NKLIN_LBYW,DPTR_NKLIN_LBXM,DPTR_NKLIN_LBYM
+REAL, DIMENSION(:,:,:), POINTER :: DPTR_XCOEFLIN_LBXU,DPTR_XCOEFLIN_LBYU
+REAL, DIMENSION(:,:,:), POINTER :: DPTR_XCOEFLIN_LBXV,DPTR_XCOEFLIN_LBYV
+REAL, DIMENSION(:,:,:), POINTER :: DPTR_XCOEFLIN_LBXW,DPTR_XCOEFLIN_LBYW
+REAL, DIMENSION(:,:,:), POINTER :: DPTR_XCOEFLIN_LBXM,DPTR_XCOEFLIN_LBYM
+REAL, DIMENSION(:,:,:),   POINTER :: DPTR_XLBXUM,DPTR_XLBYUM,DPTR_XLBXVM,DPTR_XLBYVM
+REAL, DIMENSION(:,:,:),   POINTER :: DPTR_XLBXWM,DPTR_XLBYWM,DPTR_XLBXTHM,DPTR_XLBYTHM
+REAL, DIMENSION(:,:,:),   POINTER :: DPTR_XLBXTKEM,DPTR_XLBYTKEM
+REAL, DIMENSION(:,:,:,:),   POINTER :: DPTR_XLBXSVM,DPTR_XLBYSVM                
+REAL, DIMENSION(:,:,:,:), POINTER :: DPTR_XLBXRM,DPTR_XLBYRM
+REAL, DIMENSION(:,:,:),   POINTER ::  DPTR_XZZ
+REAL, DIMENSION(:,:,:), POINTER ::   DPTR_XLSUM,DPTR_XLSVM,DPTR_XLSWM,DPTR_XLSTHM,DPTR_XLSRVM
+REAL, DIMENSION(:,:,:), POINTER ::   DPTR_XLSUS,DPTR_XLSVS,DPTR_XLSWS,DPTR_XLSTHS,DPTR_XLSRVS
+!
+!-------------------------------------------------------------------------------
+!
+!*       0.    PROLOGUE
+!              --------
+!
+NULLIFY(TZINITHALO2D_ll)
+NULLIFY(TZINITHALO3D_ll)
+!
+!*       1.    RETRIEVE LOGICAL UNIT NUMBER
+!              ----------------------------
+!
+CALL FMLOOK_ll(HLUOUT,HLUOUT,ILUOUT,IRESP)
+CLUOUT = HLUOUT
+CINIFILE=HINIFILE
+CINIFILEPGD=HINIFILEPGD
+!
+CALL FMREAD(HINIFILE,'MASDEV',HLUOUT,'--',IMASDEV,IGRID,ILENCH,YCOMMENT,IRESP)
+!-------------------------------------------------------------------------------
+!
+!*       2.   END OF READING
+!             --------------
+!*       2.1  Read number of forcing fields
+!
+IF (LFORCING) THEN ! Retrieve the number of time-dependent forcings.
+  YRECFM='FRC'
+  YDIR='--'
+  CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,NFRC,IGRID,ILENCH,YCOMMENT,IRESP)
+  IF ( (IRESP /= 0) .OR. (NFRC <=0) ) THEN
+    WRITE(ILUOUT,'(A/A)') &
+     "INI_MODEL_n ERROR: you want to read forcing variables from FMfile", &
+     "                   but no fields have been found by FMREAD"
+!callabortstop
+    CALL CLOSE_ll(CLUOUT,IOSTAT=IRESP)
+    CALL ABORT
+    STOP 1
+  END IF
+END IF
+!
+! Modif PP for time evolving adv forcing
+  IF ( L2D_ADV_FRC ) THEN ! Retrieve the number of time-dependent forcings.
+    WRITE(ILUOUT,FMT=*) "INI_MODEL_n ENTER ADV_FORCING"
+    YRECFM='NADVFRC1'
+    YDIR='--'
+    CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,NADVFRC,IGRID,ILENCH,YCOMMENT,IRESP)
+    IF ( (IRESP /= 0) .OR. (NADVFRC <=0) ) THEN
+      WRITE(ILUOUT,'(A/A)') &
+      "INI_MODELn ERROR: you want to read forcing ADV variables from FMfile", &
+      "                   but no fields have been found by FMREAD"
+    !callabortstop
+    CALL CLOSE_ll(CLUOUT,IOSTAT=IRESP)
+    CALL ABORT
+      STOP 1
+    END IF
+    WRITE(ILUOUT,*) 'NADVFRC = ', NADVFRC
+END IF
+!
+IF ( L2D_REL_FRC ) THEN ! Retrieve the number of time-dependent forcings.
+    WRITE(ILUOUT,FMT=*) "INI_MODEL_n ENTER REL_FORCING"
+    YRECFM='NRELFRC1'
+    YDIR='--'
+    CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,NRELFRC,IGRID,ILENCH,YCOMMENT,IRESP)
+    IF ( (IRESP /= 0) .OR. (NRELFRC <=0) ) THEN
+      WRITE(ILUOUT,'(A/A)') &
+      "INI_MODELn ERROR: you want to read forcing REL variables from FMfile", &
+      "                   but no fields have been found by FMREAD"
+    !callabortstop
+    CALL CLOSE_ll(CLUOUT,IOSTAT=IRESP)
+    CALL ABORT
+      STOP 1
+    END IF
+    WRITE(ILUOUT,*) 'NRELFRC = ', NRELFRC
+END IF
+!*       2.2  Checks the position of vertical absorbing layer
+!
+IKU=NKMAX+2*JPVEXT
+!
+YRECFM = 'ZHAT'
+ALLOCATE(XZHAT(IKU))
+ YDIR='--'
+CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,XZHAT,IGRID,ILENCH,YCOMMENT,IRESP)
+IF (XALZBOT>=XZHAT(IKU) .AND. LVE_RELAX) THEN
+  WRITE(ILUOUT,FMT=*) "INI_MODEL_n ERROR: you want to use vertical relaxation"
+  WRITE(ILUOUT,FMT=*) "                  but bottom of layer XALZBOT(",XALZBOT,")"
+  WRITE(ILUOUT,FMT=*) "                  is upper than model top    (",XZHAT(IKU),")"
+!callabortstop
+  CALL CLOSE_ll(CLUOUT,IOSTAT=IRESP)
+  CALL ABORT
+  STOP
+END IF
+IF (LVE_RELAX) THEN
+ IF (XALZBOT>=XZHAT(IKU-4) ) THEN
+  WRITE(ILUOUT,FMT=*) "INI_MODEL_n WARNING: you want to use vertical relaxation"
+  WRITE(ILUOUT,FMT=*) "                    but the layer defined by XALZBOT(",XALZBOT,")"
+  WRITE(ILUOUT,FMT=*) "                    contains less than 5 model levels"
+ END IF
+END IF
+DEALLOCATE(XZHAT)
+!
+!*       2.3  Compute sizes of arrays of the extended sub-domain
+!
+CALL GET_DIM_EXT_ll('B',IIU,IJU)
+IIU_ll=NIMAX_ll + 2 * JPHEXT
+IJU_ll=NJMAX_ll + 2 * JPHEXT
+! initialize NIMAX and NJMAX for not updated versions regarding the parallelism
+! spawning,...
+CALL GET_DIM_PHYS_ll('B',NIMAX,NJMAX)
+!
+NRR=0
+NRRL=0
+NRRI=0
+IF (CGETRVT /= 'SKIP' ) THEN
+  NRR = NRR+1
+END IF
+IF (CGETRCT /= 'SKIP' ) THEN
+  NRR = NRR+1
+  NRRL = NRRL+1
+END IF
+IF (CGETRRT /= 'SKIP' ) THEN
+  NRR = NRR+1
+  NRRL = NRRL+1
+END IF
+IF (CGETRIT /= 'SKIP' ) THEN
+  NRR = NRR+1
+  NRRI = NRRI+1
+END IF
+IF (CGETRST /= 'SKIP' ) THEN
+  NRR = NRR+1
+  NRRI = NRRI+1
+END IF
+IF (CGETRGT /= 'SKIP' ) THEN
+  NRR = NRR+1
+  NRRI = NRRI+1
+END IF
+IF (CGETRHT /= 'SKIP' ) THEN
+  NRR = NRR+1
+  NRRI = NRRI+1
+END IF
+IF (NVERB >= 5) THEN
+  WRITE (UNIT=ILUOUT,FMT='("THERE ARE ",I2," WATER VARIABLES")') NRR
+  WRITE (UNIT=ILUOUT,FMT='("THERE ARE ",I2," LIQUID VARIABLES")') NRRL
+  WRITE (UNIT=ILUOUT,FMT='("THERE ARE ",I2," SOLID VARIABLES")') NRRI
+END IF
+!
+!*       2.3  Update NSV and floating indices for the current model
+!
+! 
+CALL UPDATE_NSV(KMI) 
+!
+!-------------------------------------------------------------------------------
+!
+!*       3.    ALLOCATE  MEMORY
+!              -----------------
+!
+!*       3.1   Module MODD_FIELD_n
+!
+IF (LMEAN_FIELD) THEN
+!
+  MEAN_COUNT = 0
+!
+  ALLOCATE(XUM_MEAN(IIU,IJU,IKU))      ; XUM_MEAN  = 0.0
+  ALLOCATE(XVM_MEAN(IIU,IJU,IKU))      ; XVM_MEAN  = 0.0
+  ALLOCATE(XWM_MEAN(IIU,IJU,IKU))      ; XWM_MEAN  = 0.0
+  ALLOCATE(XTHM_MEAN(IIU,IJU,IKU))     ; XTHM_MEAN = 0.0
+  ALLOCATE(XTEMPM_MEAN(IIU,IJU,IKU))   ; XTEMPM_MEAN = 0.0
+  ALLOCATE(XTKEM_MEAN(IIU,IJU,IKU))    ; XTKEM_MEAN = 0.0
+  ALLOCATE(XPABSM_MEAN(IIU,IJU,IKU))   ; XPABSM_MEAN = 0.0
+!
+  ALLOCATE(XU2_MEAN(IIU,IJU,IKU))      ; XU2_MEAN  = 0.0
+  ALLOCATE(XV2_MEAN(IIU,IJU,IKU))      ; XV2_MEAN  = 0.0
+  ALLOCATE(XW2_MEAN(IIU,IJU,IKU))      ; XW2_MEAN  = 0.0
+  ALLOCATE(XTH2_MEAN(IIU,IJU,IKU))     ; XTH2_MEAN = 0.0
+  ALLOCATE(XTEMP2_MEAN(IIU,IJU,IKU))   ; XTEMP2_MEAN = 0.0
+  ALLOCATE(XPABS2_MEAN(IIU,IJU,IKU))   ; XPABS2_MEAN = 0.0
+!
+END IF
+!
+IF (CUVW_ADV_SCHEME(1:3)=='CEN') THEN
+  ALLOCATE(XUM(IIU,IJU,IKU))
+  ALLOCATE(XVM(IIU,IJU,IKU))
+  ALLOCATE(XWM(IIU,IJU,IKU))
+  ALLOCATE(XDUM(IIU,IJU,IKU))
+  ALLOCATE(XDVM(IIU,IJU,IKU))
+  ALLOCATE(XDWM(IIU,IJU,IKU))
+  IF (CCONF == 'START') THEN
+    XUM  = 0.0
+    XVM  = 0.0
+    XWM  = 0.0
+    XDUM  = 0.0
+    XDVM  = 0.0
+    XDWM  = 0.0
+  END IF
+END IF
+!
+ALLOCATE(XUT(IIU,IJU,IKU))      ; XUT  = 0.0
+ALLOCATE(XVT(IIU,IJU,IKU))      ; XVT  = 0.0
+ALLOCATE(XWT(IIU,IJU,IKU))      ; XWT  = 0.0
+ALLOCATE(XTHT(IIU,IJU,IKU))     ; XTHT = 0.0
+ALLOCATE(XRUS(IIU,IJU,IKU))     ; XRUS = 0.0
+ALLOCATE(XRVS(IIU,IJU,IKU))     ; XRVS = 0.0
+ALLOCATE(XRWS(IIU,IJU,IKU))     ; XRWS = 0.0
+ALLOCATE(XRUS_PRES(IIU,IJU,IKU)); XRUS_PRES = 0.0
+ALLOCATE(XRVS_PRES(IIU,IJU,IKU)); XRVS_PRES = 0.0
+ALLOCATE(XRWS_PRES(IIU,IJU,IKU)); XRWS_PRES = 0.0
+ALLOCATE(XRTHS(IIU,IJU,IKU))    ; XRTHS = 0.0
+ALLOCATE(XRTHS_CLD(IIU,IJU,IKU)); XRTHS_CLD = 0.0
+IF (CTURB /= 'NONE') THEN
+  ALLOCATE(XTKET(IIU,IJU,IKU))
+  ALLOCATE(XRTKES(IIU,IJU,IKU))
+  ALLOCATE(XRTKEMS(IIU,IJU,IKU)); XRTKEMS = 0.0
+  ALLOCATE(XWTHVMF(IIU,IJU,IKU))
+  ALLOCATE(XDYP(IIU,IJU,IKU))
+  ALLOCATE(XTHP(IIU,IJU,IKU))
+  ALLOCATE(XTR(IIU,IJU,IKU))
+  ALLOCATE(XDISS(IIU,IJU,IKU))
+  ALLOCATE(XLEM(IIU,IJU,IKU))
+  XTKEMIN=XKEMIN
+ELSE
+  ALLOCATE(XTKET(0,0,0))
+  ALLOCATE(XRTKES(0,0,0))
+  ALLOCATE(XWTHVMF(0,0,0))
+  ALLOCATE(XDYP(0,0,0))
+  ALLOCATE(XTHP(0,0,0))
+  ALLOCATE(XTR(0,0,0))
+  ALLOCATE(XDISS(0,0,0))
+  ALLOCATE(XLEM(0,0,0))
+END IF
+IF (CTOM == 'TM06') THEN
+  ALLOCATE(XBL_DEPTH(IIU,IJU))
+ELSE
+  ALLOCATE(XBL_DEPTH(0,0))
+END IF
+IF (LRMC01) THEN
+  ALLOCATE(XSBL_DEPTH(IIU,IJU))
+ELSE
+  ALLOCATE(XSBL_DEPTH(0,0))
+END IF
+!
+ALLOCATE(XPABSM(IIU,IJU,IKU)) ; XPABSM = 0.0
+ALLOCATE(XPABST(IIU,IJU,IKU)) ; XPABST = 0.0
+!
+ALLOCATE(XRT(IIU,IJU,IKU,NRR)) ;     XRT = 0.0
+ALLOCATE(XRRS(IIU,IJU,IKU,NRR)) ;    XRRS = 0.0
+ALLOCATE(XRRS_CLD(IIU,IJU,IKU,NRR)); XRRS_CLD = 0.0
+!
+IF (CTURB /= 'NONE' .AND. NRR>1) THEN
+  ALLOCATE(XSRCT(IIU,IJU,IKU))
+  ALLOCATE(XSIGS(IIU,IJU,IKU))
+ELSE
+  ALLOCATE(XSRCT(0,0,0))
+  ALLOCATE(XSIGS(0,0,0))
+END IF
+!
+IF (NRR>1) THEN
+  ALLOCATE(XCLDFR(IIU,IJU,IKU))
+ELSE
+  ALLOCATE(XCLDFR(0,0,0))
+END IF
+!
+ALLOCATE(XSVT(IIU,IJU,IKU,NSV)) ;     XSVT  = 0.
+ALLOCATE(XRSVS(IIU,IJU,IKU,NSV));     XRSVS = 0.
+ALLOCATE(XRSVS_CLD(IIU,IJU,IKU,NSV)); XRSVS_CLD = 0.0
+!
+IF (LPASPOL) THEN
+  ALLOCATE( XATC(IIU,IJU,IKU,NSV_PP) )
+  XATC = 0.
+             ELSE
+  ALLOCATE( XATC(0,0,0,0))
+  XATC = 0.
+END IF
+!
+!*       3.2   Module MODD_GRID_n and MODD_METRICS_n
+!
+IF (LCARTESIAN) THEN
+  ALLOCATE(XLON(0,0))
+  ALLOCATE(XLAT(0,0))
+  ALLOCATE(XMAP(0,0))
+ELSE
+  ALLOCATE(XLON(IIU,IJU))
+  ALLOCATE(XLAT(IIU,IJU))
+  ALLOCATE(XMAP(IIU,IJU))
+END IF
+ALLOCATE(XXHAT(IIU))
+ALLOCATE(XDXHAT(IIU))
+ALLOCATE(XYHAT(IJU))
+ALLOCATE(XDYHAT(IJU))
+ALLOCATE(XZS(IIU,IJU))
+ALLOCATE(XZSMT(IIU,IJU))
+ALLOCATE(XZZ(IIU,IJU,IKU))
+ALLOCATE(XZHAT(IKU))
+ALLOCATE(XDIRCOSZW(IIU,IJU))
+ALLOCATE(XDIRCOSXW(IIU,IJU))
+ALLOCATE(XDIRCOSYW(IIU,IJU))
+ALLOCATE(XCOSSLOPE(IIU,IJU))
+ALLOCATE(XSINSLOPE(IIU,IJU))
+!
+ALLOCATE(XDXX(IIU,IJU,IKU))
+ALLOCATE(XDYY(IIU,IJU,IKU))
+ALLOCATE(XDZX(IIU,IJU,IKU))
+ALLOCATE(XDZY(IIU,IJU,IKU))
+ALLOCATE(XDZZ(IIU,IJU,IKU))
+!
+!*       3.3   Modules MODD_REF and  MODD_REF_n
+!
+IF (KMI == 1) THEN
+  ALLOCATE(XRHODREFZ(IKU),XTHVREFZ(IKU))
+END IF
+ALLOCATE(XRHODREF(IIU,IJU,IKU))
+ALLOCATE(XTHVREF(IIU,IJU,IKU))
+ALLOCATE(XEXNREF(IIU,IJU,IKU))
+ALLOCATE(XRHODJ(IIU,IJU,IKU))
+IF (CEQNSYS=='DUR' .AND. LUSERV) THEN
+  ALLOCATE(XRVREF(IIU,IJU,IKU))
+ELSE
+  ALLOCATE(XRVREF(0,0,0))
+END IF
+!
+!*       3.4   Module MODD_CURVCOR_n
+!
+IF (LTHINSHELL) THEN
+  ALLOCATE(XCORIOX(0,0))
+  ALLOCATE(XCORIOY(0,0))
+ELSE
+  ALLOCATE(XCORIOX(IIU,IJU))
+  ALLOCATE(XCORIOY(IIU,IJU))
+END IF
+  ALLOCATE(XCORIOZ(IIU,IJU))
+IF (LCARTESIAN) THEN
+  ALLOCATE(XCURVX(0,0))
+  ALLOCATE(XCURVY(0,0))
+ELSE
+  ALLOCATE(XCURVX(IIU,IJU))
+  ALLOCATE(XCURVY(IIU,IJU))
+END IF
+!
+!*       3.5   Module MODD_DYN_n
+!
+CALL GET_DIM_EXT_ll('Y',IIY,IJY)
+IF (L2D) THEN
+  ALLOCATE(XBFY(IIY,IJY,IKU))
+ELSE
+  ALLOCATE(XBFY(IJY,IIY,IKU)) ! transposition needed by the optimisition of the
+                              ! FFT solver
+END IF
+CALL GET_DIM_EXT_ll('B',IIU_B,IJU_B)
+ALLOCATE(XBFB(IIU_B,IJU_B,IKU))
+CALL GET_DIM_EXTZ_ll('SXP2_YP1_Z',IIU_SXP2_YP1_Z_ll,IJU_SXP2_YP1_Z_ll,IKU_SXP2_YP1_Z_ll)
+ALLOCATE(XBF_SXP2_YP1_Z(IIU_SXP2_YP1_Z_ll,IJU_SXP2_YP1_Z_ll,IKU_SXP2_YP1_Z_ll))
+ALLOCATE(XAF(IKU),XCF(IKU))
+ALLOCATE(XTRIGSX(3*IIU_ll))
+ALLOCATE(XTRIGSY(3*IJU_ll))
+ALLOCATE(XRHOM(IKU))
+ALLOCATE(XALK(IKU))
+ALLOCATE(XALKW(IKU))
+ALLOCATE(XALKBAS(IKU))
+ALLOCATE(XALKWBAS(IKU))
+!
+IF ( LHORELAX_UVWTH .OR. LHORELAX_RV .OR.                                  &
+     LHORELAX_RC .OR. LHORELAX_RR .OR. LHORELAX_RI  .OR. LHORELAX_RS  .OR. &
+     LHORELAX_RG .OR. LHORELAX_RH .OR. LHORELAX_TKE .OR.                   &
+     ANY(LHORELAX_SV) ) THEN
+  ALLOCATE(XKURELAX(IIU,IJU))
+  ALLOCATE(XKVRELAX(IIU,IJU))
+  ALLOCATE(XKWRELAX(IIU,IJU))
+  ALLOCATE(LMASK_RELAX(IIU,IJU))
+ELSE
+  ALLOCATE(XKURELAX(0,0))
+  ALLOCATE(XKVRELAX(0,0))
+  ALLOCATE(XKWRELAX(0,0))
+  ALLOCATE(LMASK_RELAX(0,0))
+END IF
+!
+! Additional fields for truly horizontal diffusion (Module MODD_DYNZD$n)
+IF (LZDIFFU) THEN
+  CALL INIT_TYPE_ZDIFFU_HALO2(XZDIFFU_HALO2)
+ELSE
+  CALL INIT_TYPE_ZDIFFU_HALO2(XZDIFFU_HALO2,0)
+ENDIF
+!
+!*       3.6   Larger Scale variables (Module MODD_LSFIELD$n)
+!
+!
+! upper relaxation part
+!
+ALLOCATE(XLSUM(IIU,IJU,IKU))    ; XLSUM  = 0.0
+ALLOCATE(XLSVM(IIU,IJU,IKU))    ; XLSVM  = 0.0
+ALLOCATE(XLSWM(IIU,IJU,IKU))    ; XLSWM  = 0.0
+ALLOCATE(XLSTHM(IIU,IJU,IKU))   ; XLSTHM = 0.0
+IF ( NRR > 0 ) THEN
+  ALLOCATE(XLSRVM(IIU,IJU,IKU)) ; XLSRVM = 0.0
+ELSE
+  ALLOCATE(XLSRVM(0,0,0))
+END IF
+!
+!  lbc part
+!
+IF ( L1D) THEN                         ! 1D case
+!
+  NSIZELBX_ll=0
+  NSIZELBXU_ll=0
+  NSIZELBY_ll=0
+  NSIZELBYV_ll=0
+  NSIZELBXTKE_ll=0
+  NSIZELBXR_ll=0
+  NSIZELBXSV_ll=0
+  NSIZELBYTKE_ll=0
+  NSIZELBYR_ll=0
+  NSIZELBYSV_ll=0
+  ALLOCATE(XLBXUM(0,0,0))
+  ALLOCATE(XLBYUM(0,0,0))
+  ALLOCATE(XLBXVM(0,0,0))
+  ALLOCATE(XLBYVM(0,0,0))
+  ALLOCATE(XLBXWM(0,0,0))
+  ALLOCATE(XLBYWM(0,0,0))
+  ALLOCATE(XLBXTHM(0,0,0))
+  ALLOCATE(XLBYTHM(0,0,0))
+  ALLOCATE(XLBXTKEM(0,0,0))
+  ALLOCATE(XLBYTKEM(0,0,0))
+  ALLOCATE(XLBXRM(0,0,0,0))
+  ALLOCATE(XLBYRM(0,0,0,0))
+  ALLOCATE(XLBXSVM(0,0,0,0))
+  ALLOCATE(XLBYSVM(0,0,0,0))
+!
+ELSEIF( L2D ) THEN                         ! 2D case
+!
+  NSIZELBY_ll=0
+  NSIZELBYV_ll=0
+  NSIZELBYTKE_ll=0
+  NSIZELBYR_ll=0
+  NSIZELBYSV_ll=0
+  ALLOCATE(XLBYUM(0,0,0))
+  ALLOCATE(XLBYVM(0,0,0))
+  ALLOCATE(XLBYWM(0,0,0))
+  ALLOCATE(XLBYTHM(0,0,0))
+  ALLOCATE(XLBYTKEM(0,0,0))
+  ALLOCATE(XLBYRM(0,0,0,0))
+  ALLOCATE(XLBYSVM(0,0,0,0))
+!
+  CALL GET_SIZEX_LB(HLUOUT,NIMAX_ll,NJMAX_ll,NRIMX,   &
+       IISIZEXF,IJSIZEXF,IISIZEXFU,IJSIZEXFU,         &
+       IISIZEX4,IJSIZEX4,IISIZEX2,IJSIZEX2)
+!
+  IF ( LHORELAX_UVWTH ) THEN
+    NSIZELBX_ll=2*NRIMX+2*JPHEXT
+    NSIZELBXU_ll=2*NRIMX+2*JPHEXT
+    ALLOCATE(XLBXUM(IISIZEXFU,IJSIZEXFU,IKU))
+    ALLOCATE(XLBXVM(IISIZEXF,IJSIZEXF,IKU))
+    ALLOCATE(XLBXWM(IISIZEXF,IJSIZEXF,IKU))
+    ALLOCATE(XLBXTHM(IISIZEXF,IJSIZEXF,IKU))
+  ELSE
+    NSIZELBX_ll=2*JPHEXT      ! 2
+    NSIZELBXU_ll=2*(JPHEXT+1) ! 4
+    ALLOCATE(XLBXUM(IISIZEX4,IJSIZEX4,IKU))
+    ALLOCATE(XLBXVM(IISIZEX2,IJSIZEX2,IKU))
+    ALLOCATE(XLBXWM(IISIZEX2,IJSIZEX2,IKU))
+    ALLOCATE(XLBXTHM(IISIZEX2,IJSIZEX2,IKU))
+  END IF
+!
+  IF (CTURB /= 'NONE') THEN
+    IF ( LHORELAX_TKE) THEN
+      NSIZELBXTKE_ll=2* NRIMX+2*JPHEXT
+      ALLOCATE(XLBXTKEM(IISIZEXF,IJSIZEXF,IKU))
+    ELSE
+      NSIZELBXTKE_ll=2*JPHEXT  ! 2
+      ALLOCATE(XLBXTKEM(IISIZEX2,IJSIZEX2,IKU))
+    END IF
+  ELSE
+    NSIZELBXTKE_ll=0
+    ALLOCATE(XLBXTKEM(0,0,0))
+  END IF
+  !
+  IF ( NRR > 0 ) THEN
+    IF (LHORELAX_RV .OR. LHORELAX_RC .OR. LHORELAX_RR .OR. LHORELAX_RI    &
+         .OR. LHORELAX_RS .OR. LHORELAX_RG .OR. LHORELAX_RH               &
+       ) THEN
+      NSIZELBXR_ll=2* NRIMX+2*JPHEXT
+      ALLOCATE(XLBXRM(IISIZEXF,IJSIZEXF,IKU,NRR))
+    ELSE
+      NSIZELBXR_ll=2*JPHEXT  ! 2
+      ALLOCATE(XLBXRM(IISIZEX2,IJSIZEX2,IKU,NRR))
+    ENDIF
+  ELSE
+    NSIZELBXR_ll=0
+    ALLOCATE(XLBXRM(0,0,0,0))
+  END IF
+  !
+  IF ( NSV > 0 ) THEN
+    IF ( ANY( LHORELAX_SV(:)) ) THEN
+      NSIZELBXSV_ll=2* NRIMX+2*JPHEXT
+      ALLOCATE(XLBXSVM(IISIZEXF,IJSIZEXF,IKU,NSV))
+    ELSE
+      NSIZELBXSV_ll=2*JPHEXT  ! 2
+      ALLOCATE(XLBXSVM(IISIZEX2,IJSIZEX2,IKU,NSV))
+    END IF
+  ELSE
+    NSIZELBXSV_ll=0
+    ALLOCATE(XLBXSVM(0,0,0,0))
+  END IF
+!
+ELSE                                   ! 3D case
+!
+!
+  CALL GET_SIZEX_LB(HLUOUT,NIMAX_ll,NJMAX_ll,NRIMX,   &
+       IISIZEXF,IJSIZEXF,IISIZEXFU,IJSIZEXFU,          &
+       IISIZEX4,IJSIZEX4,IISIZEX2,IJSIZEX2)
+  CALL GET_SIZEY_LB(HLUOUT,NIMAX_ll,NJMAX_ll,NRIMY,   &
+       IISIZEYF,IJSIZEYF,IISIZEYFV,IJSIZEYFV,          &
+       IISIZEY4,IJSIZEY4,IISIZEY2,IJSIZEY2)
+!
+! check if local domain not to small for NRIMX NRIMY
+!
+  IF ( CLBCX(1) /= 'CYCL' )  THEN
+     IF ( NRIMX+2*JPHEXT .GE. IIU )   THEN
+        WRITE(*,'(A,I8,A/A,2I8,/A)') "Processor=", IP-1, &
+             " :: INI_MODEL_n ERROR:  ( NRIMX+2*JPHEXT >= IIU )  ", &
+             " Local domain to small for relaxation NRIMX+2*JPHEXT,IIU ", &
+             NRIMX+2*JPHEXT,IIU ,&
+             " change relaxation parameters or number of processors "
+        !callabortstop
+        CALL ABORT
+        STOP    
+     END IF
+  END IF
+  IF ( CLBCY(1) /= 'CYCL' ) THEN
+     IF ( NRIMY+2*JPHEXT .GE. IJU )  THEN
+        WRITE(*,'(A,I8,A/A,2I8,/A)') "Processor=", IP-1, &
+             " :: INI_MODEL_n ERROR:  ( NRIMY+2*JPHEXT >= IJU )  ", &
+             " Local domain to small for relaxation NRIMY+2*JPHEXT,IJU ", &
+             NRIMY+2*JPHEXT,IJU ,&
+             " change relaxation parameters or number of processors "
+        !callabortstop
+        CALL ABORT
+        STOP    
+     END IF
+  END IF
+IF ( LHORELAX_UVWTH ) THEN
+    NSIZELBX_ll=2*NRIMX+2*JPHEXT
+    NSIZELBXU_ll=2*NRIMX+2*JPHEXT
+    NSIZELBY_ll=2*NRIMY+2*JPHEXT
+    NSIZELBYV_ll=2*NRIMY+2*JPHEXT
+    ALLOCATE(XLBXUM(IISIZEXFU,IJSIZEXFU,IKU))
+    ALLOCATE(XLBYUM(IISIZEYF,IJSIZEYF,IKU))
+    ALLOCATE(XLBXVM(IISIZEXF,IJSIZEXF,IKU))
+    ALLOCATE(XLBYVM(IISIZEYFV,IJSIZEYFV,IKU))
+    ALLOCATE(XLBXWM(IISIZEXF,IJSIZEXF,IKU))
+    ALLOCATE(XLBYWM(IISIZEYF,IJSIZEYF,IKU))
+    ALLOCATE(XLBXTHM(IISIZEXF,IJSIZEXF,IKU))
+    ALLOCATE(XLBYTHM(IISIZEYF,IJSIZEYF,IKU))
+  ELSE
+    NSIZELBX_ll=2*JPHEXT  ! 2
+    NSIZELBXU_ll=2*(JPHEXT+1) ! 4
+    NSIZELBY_ll=2*JPHEXT  ! 2
+    NSIZELBYV_ll=2*(JPHEXT+1) ! 4
+    ALLOCATE(XLBXUM(IISIZEX4,IJSIZEX4,IKU))
+    ALLOCATE(XLBYUM(IISIZEY2,IJSIZEY2,IKU))
+    ALLOCATE(XLBXVM(IISIZEX2,IJSIZEX2,IKU))
+    ALLOCATE(XLBYVM(IISIZEY4,IJSIZEY4,IKU))
+    ALLOCATE(XLBXWM(IISIZEX2,IJSIZEX2,IKU))
+    ALLOCATE(XLBYWM(IISIZEY2,IJSIZEY2,IKU))
+    ALLOCATE(XLBXTHM(IISIZEX2,IJSIZEX2,IKU))
+    ALLOCATE(XLBYTHM(IISIZEY2,IJSIZEY2,IKU))
+  END IF
+  !
+  IF (CTURB /= 'NONE') THEN
+    IF ( LHORELAX_TKE) THEN
+      NSIZELBXTKE_ll=2*NRIMX+2*JPHEXT
+      NSIZELBYTKE_ll=2*NRIMY+2*JPHEXT
+      ALLOCATE(XLBXTKEM(IISIZEXF,IJSIZEXF,IKU))
+      ALLOCATE(XLBYTKEM(IISIZEYF,IJSIZEYF,IKU))
+    ELSE
+      NSIZELBXTKE_ll=2*JPHEXT  ! 2
+      NSIZELBYTKE_ll=2*JPHEXT  ! 2
+      ALLOCATE(XLBXTKEM(IISIZEX2,IJSIZEX2,IKU))
+      ALLOCATE(XLBYTKEM(IISIZEY2,IJSIZEY2,IKU))
+    END IF
+  ELSE
+    NSIZELBXTKE_ll=0
+    NSIZELBYTKE_ll=0
+    ALLOCATE(XLBXTKEM(0,0,0))
+    ALLOCATE(XLBYTKEM(0,0,0))
+  END IF
+  !
+  IF ( NRR > 0 ) THEN
+    IF (LHORELAX_RV .OR. LHORELAX_RC .OR. LHORELAX_RR .OR. LHORELAX_RI    &
+          .OR. LHORELAX_RS .OR. LHORELAX_RG .OR. LHORELAX_RH              &
+       ) THEN
+      NSIZELBXR_ll=2*NRIMX+2*JPHEXT
+      NSIZELBYR_ll=2*NRIMY+2*JPHEXT
+      ALLOCATE(XLBXRM(IISIZEXF,IJSIZEXF,IKU,NRR))
+      ALLOCATE(XLBYRM(IISIZEYF,IJSIZEYF,IKU,NRR))
+    ELSE
+      NSIZELBXR_ll=2*JPHEXT  ! 2
+      NSIZELBYR_ll=2*JPHEXT  ! 2
+      ALLOCATE(XLBXRM(IISIZEX2,IJSIZEX2,IKU,NRR))
+      ALLOCATE(XLBYRM(IISIZEY2,IJSIZEY2,IKU,NRR))
+    ENDIF
+  ELSE
+    NSIZELBXR_ll=0
+    NSIZELBYR_ll=0
+    ALLOCATE(XLBXRM(0,0,0,0))
+    ALLOCATE(XLBYRM(0,0,0,0))
+  END IF
+  !
+  IF ( NSV > 0 ) THEN
+    IF ( ANY( LHORELAX_SV(:)) ) THEN
+      NSIZELBXSV_ll=2*NRIMX+2*JPHEXT
+      NSIZELBYSV_ll=2*NRIMY+2*JPHEXT
+      ALLOCATE(XLBXSVM(IISIZEXF,IJSIZEXF,IKU,NSV))
+      ALLOCATE(XLBYSVM(IISIZEYF,IJSIZEYF,IKU,NSV))
+    ELSE
+      NSIZELBXSV_ll=2*JPHEXT  ! 2
+      NSIZELBYSV_ll=2*JPHEXT  ! 2
+      ALLOCATE(XLBXSVM(IISIZEX2,IJSIZEX2,IKU,NSV))
+      ALLOCATE(XLBYSVM(IISIZEY2,IJSIZEY2,IKU,NSV))
+    END IF
+  ELSE
+    NSIZELBXSV_ll=0
+    NSIZELBYSV_ll=0
+    ALLOCATE(XLBXSVM(0,0,0,0))
+    ALLOCATE(XLBYSVM(0,0,0,0))
+  END IF
+END IF      ! END OF THE IF STRUCTURE ON THE MODEL DIMENSION
+!
+!
+IF ( KMI > 1 ) THEN 
+  ! it has been assumed that the THeta field used the largest rim area compared
+  ! to the others prognostic variables, if it is not the case, you must change
+  ! these lines
+  ALLOCATE(XCOEFLIN_LBXM(SIZE(XLBXTHM,1),SIZE(XLBXTHM,2),SIZE(XLBXTHM,3)))
+  ALLOCATE(   NKLIN_LBXM(SIZE(XLBXTHM,1),SIZE(XLBXTHM,2),SIZE(XLBXTHM,3)))
+  ALLOCATE(XCOEFLIN_LBYM(SIZE(XLBYTHM,1),SIZE(XLBYTHM,2),SIZE(XLBYTHM,3)))
+  ALLOCATE(   NKLIN_LBYM(SIZE(XLBYTHM,1),SIZE(XLBYTHM,2),SIZE(XLBYTHM,3)))
+  ALLOCATE(XCOEFLIN_LBXU(SIZE(XLBXUM,1),SIZE(XLBXUM,2),SIZE(XLBXUM,3)))
+  ALLOCATE(   NKLIN_LBXU(SIZE(XLBXUM,1),SIZE(XLBXUM,2),SIZE(XLBXUM,3)))
+  ALLOCATE(XCOEFLIN_LBYU(SIZE(XLBYUM,1),SIZE(XLBYUM,2),SIZE(XLBYUM,3)))
+  ALLOCATE(   NKLIN_LBYU(SIZE(XLBYUM,1),SIZE(XLBYUM,2),SIZE(XLBYUM,3)))
+  ALLOCATE(XCOEFLIN_LBXV(SIZE(XLBXVM,1),SIZE(XLBXVM,2),SIZE(XLBXVM,3)))
+  ALLOCATE(   NKLIN_LBXV(SIZE(XLBXVM,1),SIZE(XLBXVM,2),SIZE(XLBXVM,3)))
+  ALLOCATE(XCOEFLIN_LBYV(SIZE(XLBYVM,1),SIZE(XLBYVM,2),SIZE(XLBYVM,3)))
+  ALLOCATE(   NKLIN_LBYV(SIZE(XLBYVM,1),SIZE(XLBYVM,2),SIZE(XLBYVM,3)))
+  ALLOCATE(XCOEFLIN_LBXW(SIZE(XLBXWM,1),SIZE(XLBXWM,2),SIZE(XLBXWM,3)))
+  ALLOCATE(   NKLIN_LBXW(SIZE(XLBXWM,1),SIZE(XLBXWM,2),SIZE(XLBXWM,3)))
+  ALLOCATE(XCOEFLIN_LBYW(SIZE(XLBYWM,1),SIZE(XLBYWM,2),SIZE(XLBYWM,3)))
+  ALLOCATE(   NKLIN_LBYW(SIZE(XLBYWM,1),SIZE(XLBYWM,2),SIZE(XLBYWM,3)))
+END IF
+!
+!  allocation of the LS fields for vertical relaxation and numerical diffusion
+IF( .NOT. LSTEADYLS )  THEN
+!
+  ALLOCATE(XLSUS(SIZE(XLSUM,1),SIZE(XLSUM,2),SIZE(XLSUM,3)))
+  ALLOCATE(XLSVS(SIZE(XLSVM,1),SIZE(XLSVM,2),SIZE(XLSVM,3)))
+  ALLOCATE(XLSWS(SIZE(XLSWM,1),SIZE(XLSWM,2),SIZE(XLSWM,3)))
+  ALLOCATE(XLSTHS(SIZE(XLSTHM,1),SIZE(XLSTHM,2),SIZE(XLSTHM,3)))
+  ALLOCATE(XLSRVS(SIZE(XLSRVM,1),SIZE(XLSRVM,2),SIZE(XLSRVM,3)))
+!
+ELSE
+!
+  ALLOCATE(XLSUS(0,0,0))
+  ALLOCATE(XLSVS(0,0,0))
+  ALLOCATE(XLSWS(0,0,0))
+  ALLOCATE(XLSTHS(0,0,0))
+  ALLOCATE(XLSRVS(0,0,0))
+!
+END IF
+!  allocation of the LB fields for horizontal relaxation and Lateral Boundaries
+IF( .NOT. ( LSTEADYLS .AND. KMI==1 ) )  THEN
+!
+  ALLOCATE(XLBXTKES(SIZE(XLBXTKEM,1),SIZE(XLBXTKEM,2),SIZE(XLBXTKEM,3)))
+  ALLOCATE(XLBYTKES(SIZE(XLBYTKEM,1),SIZE(XLBYTKEM,2),SIZE(XLBYTKEM,3)))
+  ALLOCATE(XLBXUS(SIZE(XLBXUM,1),SIZE(XLBXUM,2),SIZE(XLBXUM,3)))
+  ALLOCATE(XLBYUS(SIZE(XLBYUM,1),SIZE(XLBYUM,2),SIZE(XLBYUM,3)))
+  ALLOCATE(XLBXVS(SIZE(XLBXVM,1),SIZE(XLBXVM,2),SIZE(XLBXVM,3)))
+  ALLOCATE(XLBYVS(SIZE(XLBYVM,1),SIZE(XLBYVM,2),SIZE(XLBYVM,3)))
+  ALLOCATE(XLBXWS(SIZE(XLBXWM,1),SIZE(XLBXWM,2),SIZE(XLBXWM,3)))
+  ALLOCATE(XLBYWS(SIZE(XLBYWM,1),SIZE(XLBYWM,2),SIZE(XLBYWM,3)))
+  ALLOCATE(XLBXTHS(SIZE(XLBXTHM,1),SIZE(XLBXTHM,2),SIZE(XLBXTHM,3)))
+  ALLOCATE(XLBYTHS(SIZE(XLBYTHM,1),SIZE(XLBYTHM,2),SIZE(XLBYTHM,3)))
+  ALLOCATE(XLBXRS(SIZE(XLBXRM,1),SIZE(XLBXRM,2),SIZE(XLBXRM,3),SIZE(XLBXRM,4)))
+  ALLOCATE(XLBYRS(SIZE(XLBYRM,1),SIZE(XLBYRM,2),SIZE(XLBYRM,3),SIZE(XLBYRM,4)))
+  ALLOCATE(XLBXSVS(SIZE(XLBXSVM,1),SIZE(XLBXSVM,2),SIZE(XLBXSVM,3),SIZE(XLBXSVM,4)))
+  ALLOCATE(XLBYSVS(SIZE(XLBYSVM,1),SIZE(XLBYSVM,2),SIZE(XLBYSVM,3),SIZE(XLBYSVM,4)))
+!
+ELSE
+!
+  ALLOCATE(XLBXTKES(0,0,0))
+  ALLOCATE(XLBYTKES(0,0,0))
+  ALLOCATE(XLBXUS(0,0,0))
+  ALLOCATE(XLBYUS(0,0,0))
+  ALLOCATE(XLBXVS(0,0,0))
+  ALLOCATE(XLBYVS(0,0,0))
+  ALLOCATE(XLBXWS(0,0,0))
+  ALLOCATE(XLBYWS(0,0,0))
+  ALLOCATE(XLBXTHS(0,0,0))
+  ALLOCATE(XLBYTHS(0,0,0))
+  ALLOCATE(XLBXRS(0,0,0,0))
+  ALLOCATE(XLBYRS(0,0,0,0))
+  ALLOCATE(XLBXSVS(0,0,0,0))
+  ALLOCATE(XLBYSVS(0,0,0,0))
+!
+END IF
+!
+!
+!*       3.7   Module MODD_RADIATIONS_n (except XOZON and XAER)
+!
+!
+NSWB_MNH = 6
+ALLOCATE(XSW_BANDS (NSWB_MNH))
+ALLOCATE(XZENITH   (IIU,IJU))
+ALLOCATE(XAZIM     (IIU,IJU))
+ALLOCATE(XALBUV    (IIU,IJU))
+ALLOCATE(XDIRSRFSWD(IIU,IJU,NSWB_MNH))
+ALLOCATE(XSCAFLASWD(IIU,IJU,NSWB_MNH))
+ALLOCATE(XFLALWD   (IIU,IJU))
+!
+IF (CRAD /= 'NONE') THEN
+  ALLOCATE(XSLOPANG(IIU,IJU))
+  ALLOCATE(XSLOPAZI(IIU,IJU))
+  ALLOCATE(XDTHRAD(IIU,IJU,IKU))
+  ALLOCATE(XDIRFLASWD(IIU,IJU,NSWB_MNH))
+  ALLOCATE(XDIR_ALB(IIU,IJU,NSWB_MNH))
+  ALLOCATE(XSCA_ALB(IIU,IJU,NSWB_MNH))
+  ALLOCATE(XEMIS  (IIU,IJU))
+  ALLOCATE(XTSRAD (IIU,IJU))    ; XTSRAD = 0.0
+  ALLOCATE(XSEA (IIU,IJU))
+  ALLOCATE(XZS_XY (IIU,IJU))
+  ALLOCATE(NCLEARCOL_TM1(IIU,IJU))
+  ALLOCATE(XSWU(IIU,IJU,IKU))
+  ALLOCATE(XSWD(IIU,IJU,IKU))
+  ALLOCATE(XLWU(IIU,IJU,IKU))
+  ALLOCATE(XLWD(IIU,IJU,IKU))
+  ALLOCATE(XDTHRADSW(IIU,IJU,IKU))
+  ALLOCATE(XDTHRADLW(IIU,IJU,IKU))
+  ALLOCATE(XRADEFF(IIU,IJU,IKU))
+ELSE
+  ALLOCATE(XSLOPANG(0,0))
+  ALLOCATE(XSLOPAZI(0,0))
+  ALLOCATE(XDTHRAD(0,0,0))
+  ALLOCATE(XDIRFLASWD(0,0,0))
+  ALLOCATE(XDIR_ALB(0,0,0))
+  ALLOCATE(XSCA_ALB(0,0,0))
+  ALLOCATE(XEMIS  (0,0))
+  ALLOCATE(XTSRAD (0,0))
+  ALLOCATE(XSEA (0,0))
+  ALLOCATE(XZS_XY (0,0))
+  ALLOCATE(NCLEARCOL_TM1(0,0))
+  ALLOCATE(XSWU(0,0,0))
+  ALLOCATE(XSWD(0,0,0))
+  ALLOCATE(XLWU(0,0,0))
+  ALLOCATE(XLWD(0,0,0))
+  ALLOCATE(XDTHRADSW(0,0,0))
+  ALLOCATE(XDTHRADLW(0,0,0))
+  ALLOCATE(XRADEFF(0,0,0))
+END IF
+
+IF (CRAD == 'ECMW') THEN
+  ALLOCATE(XSTROATM(31,6))
+  ALLOCATE(XSMLSATM(31,6))
+  ALLOCATE(XSMLWATM(31,6))
+  ALLOCATE(XSPOSATM(31,6))
+  ALLOCATE(XSPOWATM(31,6))
+  ALLOCATE(XSTATM(31,6))
+ELSE
+  ALLOCATE(XSTROATM(0,0))
+  ALLOCATE(XSMLSATM(0,0))
+  ALLOCATE(XSMLWATM(0,0))
+  ALLOCATE(XSPOSATM(0,0))
+  ALLOCATE(XSPOWATM(0,0))
+  ALLOCATE(XSTATM(0,0))
+END IF
+!
+!*       3.8   Module MODD_DEEP_CONVECTION_n
+!
+IF (CDCONV /= 'NONE' .OR. CSCONV == 'KAFR') THEN
+  ALLOCATE(NCOUNTCONV(IIU,IJU))
+  ALLOCATE(XDTHCONV(IIU,IJU,IKU))
+  ALLOCATE(XDRVCONV(IIU,IJU,IKU))
+  ALLOCATE(XDRCCONV(IIU,IJU,IKU))
+  ALLOCATE(XDRICONV(IIU,IJU,IKU))
+  ALLOCATE(XPRCONV(IIU,IJU))
+  ALLOCATE(XPACCONV(IIU,IJU))
+  ALLOCATE(XPRSCONV(IIU,IJU))
+  ! diagnostics
+  IF (LCH_CONV_LINOX) THEN
+    ALLOCATE(XIC_RATE(IIU,IJU))
+    ALLOCATE(XCG_RATE(IIU,IJU))
+    ALLOCATE(XIC_TOTAL_NUMBER(IIU,IJU))
+    ALLOCATE(XCG_TOTAL_NUMBER(IIU,IJU))
+  ELSE
+    ALLOCATE(XIC_RATE(0,0))
+    ALLOCATE(XCG_RATE(0,0))
+    ALLOCATE(XIC_TOTAL_NUMBER(0,0))
+    ALLOCATE(XCG_TOTAL_NUMBER(0,0))
+  END IF
+  IF ( LDIAGCONV )  THEN
+    ALLOCATE(XUMFCONV(IIU,IJU,IKU))
+    ALLOCATE(XDMFCONV(IIU,IJU,IKU))
+    ALLOCATE(XPRLFLXCONV(IIU,IJU,IKU))
+    ALLOCATE(XPRSFLXCONV(IIU,IJU,IKU))
+    ALLOCATE(XCAPE(IIU,IJU))
+    ALLOCATE(NCLTOPCONV(IIU,IJU))
+    ALLOCATE(NCLBASCONV(IIU,IJU))
+  ELSE
+    ALLOCATE(XUMFCONV(0,0,0))
+    ALLOCATE(XDMFCONV(0,0,0))
+    ALLOCATE(XPRLFLXCONV(0,0,0))
+    ALLOCATE(XPRSFLXCONV(0,0,0))
+    ALLOCATE(XCAPE(0,0))
+    ALLOCATE(NCLTOPCONV(0,0))
+    ALLOCATE(NCLBASCONV(0,0))
+  END IF
+ELSE
+  ALLOCATE(XPRCONV(0,0))
+  ALLOCATE(XPACCONV(0,0))
+  ALLOCATE(XPRSCONV(0,0))
+END IF
+!
+IF ((CDCONV == 'KAFR' .OR. CSCONV == 'KAFR') &
+    .AND. LSUBG_COND .AND. LSIG_CONV) THEN
+  ALLOCATE(XMFCONV(IIU,IJU,IKU))
+ELSE
+  ALLOCATE(XMFCONV(0,0,0))
+ENDIF
+!
+IF ((CDCONV == 'KAFR' .OR. CSCONV == 'KAFR') &
+    .AND. LCHTRANS .AND. NSV > 0 ) THEN
+  ALLOCATE(XDSVCONV(IIU,IJU,IKU,NSV))
+ELSE
+  ALLOCATE(XDSVCONV(0,0,0,0))
+END IF
+!
+ALLOCATE(XCF_MF(IIU,IJU,IKU)) ; XCF_MF=0.0
+ALLOCATE(XRC_MF(IIU,IJU,IKU)) ; XRC_MF=0.0
+ALLOCATE(XRI_MF(IIU,IJU,IKU)) ; XRI_MF=0.0
+!
+!*       3.9   Local variables
+!
+ALLOCATE(ZJ(IIU,IJU,IKU))
+!
+!*      3.10 Forcing variables (Module MODD_FRC)
+!
+IF (KMI == 1) THEN
+  IF ( LFORCING ) THEN
+    ALLOCATE(TDTFRC(NFRC))
+    ALLOCATE(XUFRC(IKU,NFRC))
+    ALLOCATE(XVFRC(IKU,NFRC))
+    ALLOCATE(XWFRC(IKU,NFRC))
+    ALLOCATE(XTHFRC(IKU,NFRC))
+    ALLOCATE(XRVFRC(IKU,NFRC))
+    ALLOCATE(XTENDTHFRC(IKU,NFRC))
+    ALLOCATE(XTENDRVFRC(IKU,NFRC))
+    ALLOCATE(XGXTHFRC(IKU,NFRC))
+    ALLOCATE(XGYTHFRC(IKU,NFRC))
+    ALLOCATE(XPGROUNDFRC(NFRC))
+  ELSE
+    ALLOCATE(TDTFRC(0))
+    ALLOCATE(XUFRC(0,0))
+    ALLOCATE(XVFRC(0,0))
+    ALLOCATE(XWFRC(0,0))
+    ALLOCATE(XTHFRC(0,0))
+    ALLOCATE(XRVFRC(0,0))
+    ALLOCATE(XTENDTHFRC(0,0))
+    ALLOCATE(XTENDRVFRC(0,0))
+    ALLOCATE(XGXTHFRC(0,0))
+    ALLOCATE(XGYTHFRC(0,0))
+    ALLOCATE(XPGROUNDFRC(0))
+  END IF
+  IF ( LFORCING ) THEN
+    ALLOCATE(XWTFRC(IIU,IJU,IKU))
+    ALLOCATE(XUFRC_PAST(IIU,IJU,IKU)) ; XUFRC_PAST = XUNDEF
+    ALLOCATE(XVFRC_PAST(IIU,IJU,IKU)) ; XVFRC_PAST = XUNDEF
+  ELSE
+    ALLOCATE(XWTFRC(0,0,0))
+    ALLOCATE(XUFRC_PAST(0,0,0))
+    ALLOCATE(XVFRC_PAST(0,0,0))
+  END IF
+END IF
+! ----------------------------------------------------------------------
+!
+IF (L2D_ADV_FRC) THEN
+  WRITE(ILUOUT,*) 'L2D_ADV_FRC IS SET TO', L2D_ADV_FRC
+  WRITE(ILUOUT,*) 'ADV FRC WILL BE SET'
+  ALLOCATE(TDTADVFRC(NADVFRC))
+  ALLOCATE(XDTHFRC(IIU,IJU,IKU,NADVFRC))  ; XDTHFRC=0.
+  ALLOCATE(XDRVFRC(IIU,IJU,IKU,NADVFRC))  ; XDRVFRC=0.
+ELSE
+  ALLOCATE(TDTADVFRC(0))
+  ALLOCATE(XDTHFRC(0,0,0,0))
+  ALLOCATE(XDRVFRC(0,0,0,0))
+ENDIF
+
+IF (L2D_REL_FRC) THEN
+  WRITE(ILUOUT,*) 'L2D_REL_FRC IS SET TO', L2D_REL_FRC
+  WRITE(ILUOUT,*) 'REL FRC WILL BE SET'
+  ALLOCATE(TDTRELFRC(NRELFRC))
+  ALLOCATE(XTHREL(IIU,IJU,IKU,NRELFRC))  ; XTHREL=0.
+  ALLOCATE(XRVREL(IIU,IJU,IKU,NRELFRC))  ; XRVREL=0.
+ELSE
+  ALLOCATE(TDTRELFRC(0))
+  ALLOCATE(XTHREL(0,0,0,0))
+  ALLOCATE(XRVREL(0,0,0,0))
+ENDIF
+!
+!*      4.11 BIS: Eddy fluxes allocation
+!
+IF ( LTH_FLX ) THEN
+   ALLOCATE(XVTH_FLUX_M(IIU,IJU,IKU)) ; XVTH_FLUX_M = 0.
+   ALLOCATE(XWTH_FLUX_M(IIU,IJU,IKU)) ; XWTH_FLUX_M = 0.
+   IF (KMI /= 1) THEN
+      ALLOCATE(XRTHS_EDDY_FLUX(IIU,IJU,IKU))
+      XRTHS_EDDY_FLUX = 0.
+   ENDIF
+ELSE
+   ALLOCATE(XVTH_FLUX_M(0,0,0)) ; XVTH_FLUX_M = 0.
+   ALLOCATE(XWTH_FLUX_M(0,0,0)) ; XWTH_FLUX_M = 0.
+END IF
+!
+IF ( LUV_FLX) THEN
+   ALLOCATE(XVU_FLUX_M(IIU,IJU,IKU)) ; XVU_FLUX_M  = 0.
+   IF (KMI /= 1) THEN
+      ALLOCATE(XRVS_EDDY_FLUX(IIU,IJU,IKU))
+      XRVS_EDDY_FLUX = 0.
+   ENDIF
+ELSE
+   ALLOCATE(XVU_FLUX_M(0,0,0)) ; XVU_FLUX_M  = 0.
+END IF
+!
+!*      3.11   Module MODD_ICE_CONC_n
+!
+IF (     (CCLOUD == 'ICE3'.OR.CCLOUD == 'ICE4') .AND.   &
+     (CPROGRAM == 'DIAG  '.OR.CPROGRAM == 'MESONH')) THEN
+  ALLOCATE(XCIT(IIU,IJU,IKU))
+ELSE
+  ALLOCATE(XCIT(0,0,0))
+END IF
+!
+!*      3.12   Module MODD_TURB_CLOUD
+!
+IF (.NOT.(ALLOCATED(XCEI))) ALLOCATE(XCEI(0,0,0))
+IF (KMI == NMODEL_CLOUD .AND. CTURBLEN_CLOUD/='NONE' ) THEN
+  DEALLOCATE(XCEI)
+  ALLOCATE(XCEI(IIU,IJU,IKU))
+ENDIF
+!
+!*      3.13  Module MODD_CH_PH_n
+!
+IF (LUSECHAQ.AND.(CPROGRAM == 'DIAG  '.OR.CPROGRAM == 'MESONH')) THEN
+  IF (LCH_PH) THEN
+    ALLOCATE(XPHC(IIU,IJU,IKU))
+    IF (NRRL==2) THEN
+      ALLOCATE(XPHR(IIU,IJU,IKU))
+    ENDIF
+  ENDIF
+  ALLOCATE(XACPRAQ(IIU,IJU,NSV_CHAC/2))
+  XACPRAQ(:,:,:) = 0.
+ENDIF
+!
+!-------------------------------------------------------------------------------
+!
+!*       4.    INITIALIZE BUDGET VARIABLES
+!              ---------------------------
+!
+IF ( CBUTYPE /= "NONE" .AND. NBUMOD == KMI ) THEN
+  CALL INI_BUDGET(ILUOUT, HLUOUT,XTSTEP,NSV,NRR,                              &
+             LNUMDIFU,LNUMDIFTH,LNUMDIFSV,                                    &
+             LHORELAX_UVWTH,LHORELAX_RV, LHORELAX_RC,LHORELAX_RR,             &
+             LHORELAX_RI,LHORELAX_RS,LHORELAX_RG, LHORELAX_RH,LHORELAX_TKE,   &
+             LHORELAX_SV,LVE_RELAX,LCHTRANS,LNUDGING,LDRAGTREE,               &
+             CRAD,CDCONV,CSCONV,CTURB,CTURBDIM,CCLOUD                         )
+END IF
+!
+!-------------------------------------------------------------------------------
+!
+!
+!*       5.    INITIALIZE INTERPOLATION COEFFICIENTS
+!
+CALL INI_BIKHARDT_n (NDXRATIO_ALL(KMI),NDYRATIO_ALL(KMI),KMI)
+!
+!-------------------------------------------------------------------------------
+!
+!*       6.    INITIALIZE GRIDS AND METRIC COEFFICIENTS
+!              ----------------------------------------
+!
+CALL SET_GRID(KMI,HINIFILE,HLUOUT,IIU,IJU,IKU,NIMAX_ll,NJMAX_ll,         &
+              XBMX1,XBMX2,XBMX3,XBMX4,XBMY1,XBMY2,XBMY3,XBMY4,           &
+              XBFX1,XBFX2,XBFX3,XBFX4,XBFY1,XBFY2,XBFY3,XBFY4,           &
+              NXOR_ALL(KMI),NYOR_ALL(KMI),NXEND_ALL(KMI),NYEND_ALL(KMI), &
+              NDXRATIO_ALL(KMI),NDYRATIO_ALL(KMI),                       &
+              CLBCX,CLBCY,                                               &
+              XTSTEP,XSEGLEN,                                            &
+              XLONORI,XLATORI,XLON,XLAT,                                 &
+              XXHAT,XYHAT,XDXHAT,XDYHAT, XMAP,                           &
+              XZS,XZZ,XZHAT,LSLEVE,XLEN1,XLEN2,XZSMT,                    &
+              ZJ,                                                        &
+              TDTMOD,TDTCUR,NSTOP,NOUT_TIMES,NOUT_NUMB)
+!
+CALL METRICS(XMAP,XDXHAT,XDYHAT,XZZ,XDXX,XDYY,XDZX,XDZY,XDZZ)
+!
+!* update halos of metric coefficients
+!
+!
+CALL UPDATE_METRICS(CLBCX,CLBCY,XDXX,XDYY,XDZX,XDZY,XDZZ)
+!
+!
+CALL SET_DIRCOS(CLBCX,CLBCY,XDXX,XDYY,XDZX,XDZY,TZINITHALO2D_ll,   &
+                XDIRCOSXW,XDIRCOSYW,XDIRCOSZW,XCOSSLOPE,XSINSLOPE  )
+!
+! grid nesting initializations
+IF ( KMI == 1 ) THEN
+  XTSTEP_MODEL1=XTSTEP
+END IF
+!
+NDT_2_WAY(KMI)=4
+!
+!-------------------------------------------------------------------------------
+!
+!*      7.    INITIALIZE DATA FOR JVALUES AND AEROSOLS 
+!
+IF ( LUSECHEM .OR. LCHEMDIAG ) THEN
+  IF ((KMI==1).AND.(CPROGRAM == "MESONH".OR.CPROGRAM == "DIAG  "))  &
+    CALL CH_INIT_JVALUES(TDTCUR%TDATE%DAY, TDTCUR%TDATE%MONTH,      &
+                         TDTCUR%TDATE%YEAR, ILUOUT, XCH_TUV_DOBNEW)
+!
+  IF (LORILAM) THEN
+    CALL CH_AER_MOD_INIT
+  ELSE
+    IF (.NOT.(ASSOCIATED(XSOLORG))) ALLOCATE(XSOLORG(0,0,0,0))  
+    IF (.NOT.(ASSOCIATED(XMI))) ALLOCATE(XMI(0,0,0,0))  
+  ENDIF
+ELSE
+  IF (.NOT.(ASSOCIATED(XMI))) ALLOCATE(XMI(0,0,0,0))
+  IF (.NOT.(ASSOCIATED(XSOLORG))) ALLOCATE(XSOLORG(0,0,0,0))
+END IF
+!
+!-------------------------------------------------------------------------------
+!
+!*       8.    INITIALIZE THE PROGNOSTIC FIELDS
+!              --------------------------------
+!
+CALL MPPDB_CHECK3D(XUT,"INI_MODEL_N-before read_field::XUT",PRECISION)
+CALL READ_FIELD(HINIFILE,HLUOUT,IMASDEV, IIU,IJU,IKU,XTSTEP,                  &
+                CGETTKET,CGETRVT,CGETRCT,CGETRRT,CGETRIT,CGETCIT,             &
+                CGETRST,CGETRGT,CGETRHT,CGETSVT,CGETSRCT,CGETSIGS,CGETCLDFR,  &
+                CGETBL_DEPTH,CGETSBL_DEPTH,CGETPHC,CGETPHR,CUVW_ADV_SCHEME,   &
+                NSIZELBX_ll,NSIZELBXU_ll,NSIZELBY_ll,NSIZELBYV_ll,            &
+                NSIZELBXTKE_ll,NSIZELBYTKE_ll,                                &
+                NSIZELBXR_ll,NSIZELBYR_ll,NSIZELBXSV_ll,NSIZELBYSV_ll,        &
+                XUM,XVM,XWM,XDUM,XDVM,XDWM,                                   &
+                XUT,XVT,XWT,XTHT,XPABST,XPABSM,XTKET,XRTKEMS,                 &
+                XRT,XSVT,XCIT,XDRYMASST,                                      &
+                XSIGS,XSRCT,XCLDFR,XBL_DEPTH,XSBL_DEPTH,XWTHVMF,XPHC,XPHR,    &
+                XLSUM,XLSVM,XLSWM,XLSTHM,XLSRVM,                              &
+                XLBXUM,XLBXVM,XLBXWM,XLBXTHM,XLBXTKEM,                        &
+                XLBXRM,XLBXSVM,                                               &
+                XLBYUM,XLBYVM,XLBYWM,XLBYTHM,XLBYTKEM,                        &
+                XLBYRM,XLBYSVM,                                               &
+                NFRC,TDTFRC,XUFRC,XVFRC,XWFRC,XTHFRC,XRVFRC,                  &
+                XTENDTHFRC,XTENDRVFRC,XGXTHFRC,XGYTHFRC,                      &
+                XPGROUNDFRC, XATC,                                            &
+                NADVFRC,TDTADVFRC,XDTHFRC,XDRVFRC,                            &
+                NRELFRC,TDTRELFRC,XTHREL,XRVREL,                              &
+                XVTH_FLUX_M,XWTH_FLUX_M,XVU_FLUX_M,                           &
+                XRUS_PRES,XRVS_PRES,XRWS_PRES,XRTHS_CLD,XRRS_CLD,XRSVS_CLD    )
+!
+!-------------------------------------------------------------------------------
+!
+!
+!*        9.   INITIALIZE REFERENCE STATE
+!              ---------------------------
+!
+!
+CALL SET_REF(KMI,HINIFILE,HLUOUT,                                &
+             XZZ,XZHAT,ZJ,XDXX,XDYY,CLBCX,CLBCY,                 &
+             XREFMASS,XMASS_O_PHI0,XLINMASS,                      &
+             XRHODREF,XTHVREF,XRVREF,XEXNREF,XRHODJ              )
+!
+!-------------------------------------------------------------------------------
+!
+!*       10.1    INITIALIZE THE TURBULENCE VARIABLES
+!               -----------------------------------
+!
+IF ((CTURB == 'TKEL').AND.(CCONF=='START')) THEN
+  CALL MPPDB_CHECK3D(XUT,"INI_MODEL_N-before ini_tke_eps::XUT",PRECISION)
+  CALL INI_TKE_EPS(CGETTKET,XTHVREF,XZZ, &
+                   XUT,XVT,XTHT,                  &
+                   XTKET,TZINITHALO3D_ll    )
+  CALL MPPDB_CHECK3D(XUT,"INI_MODEL_N-after ini_tke_eps::XUT",PRECISION)
+END IF
+!
+!
+!*       10.2   INITIALIZE THE LES VARIABLES
+!               ----------------------------
+!
+CALL INI_LES_n
+!
+!-------------------------------------------------------------------------------
+!
+!*       11.    INITIALIZE THE SOURCE OF TOTAL DRY MASS Md
+!               ------------------------------------------
+!
+IF((KMI==1).AND.LSTEADYLS) THEN
+  XDRYMASSS = 0.
+END IF
+!
+!-------------------------------------------------------------------------------
+!
+!*       12.    INITIALIZE THE MICROPHYSICS                   
+!               ----------------------------
+!
+IF (CELEC == 'NONE') THEN
+  CALL INI_MICRO_n(ILUOUT)
+!
+!-------------------------------------------------------------------------------
+!
+!*       13.    INITIALIZE THE ATMOSPHERIC ELECTRICITY                   
+!               --------------------------------------
+!
+ELSE
+  CALL INI_ELEC_n(ILUOUT, CELEC, CCLOUD, HLUOUT, CINIFILE, &
+                  XTSTEP, XZZ,                             &
+                  XDXX, XDYY, XDZZ, XDZX, XDZY             )
+!
+  WRITE (UNIT=ILUOUT,&
+  FMT='(/,"ELECTRIC VARIABLES ARE BETWEEN INDEX",I2," AND ",I2)')&
+  NSV_ELECBEG, NSV_ELECEND
+! 
+    IF( CGETSVT(NSV_ELECBEG)=='INIT' ) THEN
+      XSVT(:,:,:,NSV_ELECBEG) = XCION_POS_FW(:,:,:)                  ! Nb/kg
+      XSVT(:,:,:,NSV_ELECEND) = XCION_NEG_FW(:,:,:)
+!
+      XSVT(:,:,:,NSV_ELECBEG+1:NSV_ELECEND-1) = 0.0
+    ELSE  ! Convert elec_variables per m3 into elec_variables per kg of air
+      DO JSV = NSV_ELECBEG, NSV_ELECEND
+         XSVT(:,:,:,JSV) = XSVT(:,:,:,JSV) / XRHODREF(:,:,:)
+      ENDDO
+    END IF
+END IF
+!
+!-------------------------------------------------------------------------------
+!
+!*       14.   INITIALIZE THE LARGE SCALE SOURCES
+!              ----------------------------------
+!
+IF ((KMI==1).AND.(.NOT. LSTEADYLS)) THEN
+  CALL MPPDB_CHECK3D(XUT,"INI_MODEL_N-before ini_cpl::XUT",PRECISION)
+  CALL INI_CPL(HLUOUT,NSTOP,XTSTEP,LSTEADYLS,CCONF,                           &
+               CGETTKET,                                                      &
+               CGETRVT,CGETRCT,CGETRRT,CGETRIT,                               &
+               CGETRST,CGETRGT,CGETRHT,CGETSVT,LCH_INIT_FIELD,                &
+               NSV,NIMAX_ll,NJMAX_ll,                                         &
+               NSIZELBX_ll,NSIZELBXU_ll,NSIZELBY_ll,NSIZELBYV_ll,             &
+               NSIZELBXTKE_ll,NSIZELBYTKE_ll,                                 &
+               NSIZELBXR_ll,NSIZELBYR_ll,NSIZELBXSV_ll,NSIZELBYSV_ll,         &
+               XLSUM,XLSVM,XLSWM,XLSTHM,XLSRVM,XDRYMASST,                     &
+               XLBXUM,XLBXVM,XLBXWM,XLBXTHM,XLBXTKEM,XLBXRM,XLBXSVM,          &
+               XLBYUM,XLBYVM,XLBYWM,XLBYTHM,XLBYTKEM,XLBYRM,XLBYSVM,          &
+               XLSUS,XLSVS,XLSWS,XLSTHS,XLSRVS,XDRYMASSS,                     &
+               XLBXUS,XLBXVS,XLBXWS,XLBXTHS,XLBXTKES,XLBXRS,XLBXSVS,          &
+               XLBYUS,XLBYVS,XLBYWS,XLBYTHS,XLBYTKES,XLBYRS,XLBYSVS           )
+  CALL MPPDB_CHECK3D(XUT,"INI_MODEL_N-after ini_cpl::XUT",PRECISION)
+END IF
+!
+IF ( KMI > 1) THEN
+  ! Use dummy pointers to correct an ifort BUG
+  DPTR_XBMX1=>XBMX1
+  DPTR_XBMX2=>XBMX2
+  DPTR_XBMX3=>XBMX3
+  DPTR_XBMX4=>XBMX4
+  DPTR_XBMY1=>XBMY1
+  DPTR_XBMY2=>XBMY2
+  DPTR_XBMY3=>XBMY3
+  DPTR_XBMY4=>XBMY4
+  DPTR_XBFX1=>XBFX1
+  DPTR_XBFX2=>XBFX2
+  DPTR_XBFX3=>XBFX3
+  DPTR_XBFX4=>XBFX4
+  DPTR_XBFY1=>XBFY1
+  DPTR_XBFY2=>XBFY2
+  DPTR_XBFY3=>XBFY3
+  DPTR_XBFY4=>XBFY4
+  DPTR_CLBCX=>CLBCX
+  DPTR_CLBCY=>CLBCY
+  !
+  DPTR_XZZ=>XZZ
+  DPTR_XZHAT=>XZHAT
+  DPTR_XLSUM=>XLSUM
+  DPTR_XLSVM=>XLSVM
+  DPTR_XLSWM=>XLSWM
+  DPTR_XLSTHM=>XLSTHM
+  DPTR_XLSRVM=>XLSRVM
+  DPTR_XLSUS=>XLSUS
+  DPTR_XLSVS=>XLSVS
+  DPTR_XLSWS=>XLSWS
+  DPTR_XLSTHS=>XLSTHS
+  DPTR_XLSRVS=>XLSRVS
+  !
+  DPTR_NKLIN_LBXU=>NKLIN_LBXU
+  DPTR_XCOEFLIN_LBXU=>XCOEFLIN_LBXU
+  DPTR_NKLIN_LBYU=>NKLIN_LBYU
+  DPTR_XCOEFLIN_LBYU=>XCOEFLIN_LBYU
+  DPTR_NKLIN_LBXV=>NKLIN_LBXV
+  DPTR_XCOEFLIN_LBXV=>XCOEFLIN_LBXV
+  DPTR_NKLIN_LBYV=>NKLIN_LBYV
+  DPTR_XCOEFLIN_LBYV=>XCOEFLIN_LBYV
+  DPTR_NKLIN_LBXW=>NKLIN_LBXW
+  DPTR_XCOEFLIN_LBXW=>XCOEFLIN_LBXW
+  DPTR_NKLIN_LBYW=>NKLIN_LBYW
+  DPTR_XCOEFLIN_LBYW=>XCOEFLIN_LBYW
+  DPTR_NKLIN_LBXM=>NKLIN_LBXM
+  DPTR_XCOEFLIN_LBXM=>XCOEFLIN_LBXM
+  DPTR_NKLIN_LBYM=>NKLIN_LBYM
+  DPTR_XCOEFLIN_LBYM=>XCOEFLIN_LBYM
+  !
+  CALL INI_SPAWN_LS_n(NDAD(KMI),XTSTEP,KMI,                                 &
+       DPTR_XBMX1,DPTR_XBMX2,DPTR_XBMX3,DPTR_XBMX4,DPTR_XBMY1,DPTR_XBMY2,DPTR_XBMY3,DPTR_XBMY4,      &
+       DPTR_XBFX1,DPTR_XBFX2,DPTR_XBFX3,DPTR_XBFX4,DPTR_XBFY1,DPTR_XBFY2,DPTR_XBFY3,DPTR_XBFY4,      &
+       NDXRATIO_ALL(KMI),NDYRATIO_ALL(KMI),                  &
+       DPTR_CLBCX,DPTR_CLBCY,DPTR_XZZ,DPTR_XZHAT,                                &
+       LSLEVE,XLEN1,XLEN2,                                   &
+       DPTR_XLSUM,DPTR_XLSVM,DPTR_XLSWM,DPTR_XLSTHM,DPTR_XLSRVM,                      &
+       DPTR_XLSUS,DPTR_XLSVS,DPTR_XLSWS,DPTR_XLSTHS,DPTR_XLSRVS,                      &
+       DPTR_NKLIN_LBXU,DPTR_XCOEFLIN_LBXU,DPTR_NKLIN_LBYU,DPTR_XCOEFLIN_LBYU,    &
+       DPTR_NKLIN_LBXV,DPTR_XCOEFLIN_LBXV,DPTR_NKLIN_LBYV,DPTR_XCOEFLIN_LBYV,    &
+       DPTR_NKLIN_LBXW,DPTR_XCOEFLIN_LBXW,DPTR_NKLIN_LBYW,DPTR_XCOEFLIN_LBYW,    &
+       DPTR_NKLIN_LBXM,DPTR_XCOEFLIN_LBXM,DPTR_NKLIN_LBYM,DPTR_XCOEFLIN_LBYM     )
+  !
+  DPTR_XLBXUM=>XLBXUM
+  DPTR_XLBYUM=>XLBYUM
+  DPTR_XLBXVM=>XLBXVM
+  DPTR_XLBYVM=>XLBYVM
+  DPTR_XLBXWM=>XLBXWM
+  DPTR_XLBYWM=>XLBYWM
+  DPTR_XLBXTHM=>XLBXTHM
+  DPTR_XLBYTHM=>XLBYTHM
+  DPTR_XLBXTKEM=>XLBXTKEM
+  DPTR_XLBYTKEM=>XLBYTKEM
+  DPTR_XLBXRM=>XLBXRM
+  DPTR_XLBYRM=>XLBYRM
+  DPTR_XLBXSVM=>XLBXSVM
+  DPTR_XLBYSVM=>XLBYSVM
+  CALL INI_ONE_WAY_n(NDAD(KMI),CLUOUT,XTSTEP,KMI,1,                         &
+       DPTR_XBMX1,DPTR_XBMX2,DPTR_XBMX3,DPTR_XBMX4,DPTR_XBMY1,DPTR_XBMY2,DPTR_XBMY3,DPTR_XBMY4,        &
+       DPTR_XBFX1,DPTR_XBFX2,DPTR_XBFX3,DPTR_XBFX4,DPTR_XBFY1,DPTR_XBFY2,DPTR_XBFY3,DPTR_XBFY4,        &
+       NDXRATIO_ALL(KMI),NDYRATIO_ALL(KMI),NDTRATIO(KMI),      &
+       DPTR_CLBCX,DPTR_CLBCY,NRIMX,NRIMY,                                &
+       DPTR_NKLIN_LBXU,DPTR_XCOEFLIN_LBXU,DPTR_NKLIN_LBYU,DPTR_XCOEFLIN_LBYU,      &
+       DPTR_NKLIN_LBXV,DPTR_XCOEFLIN_LBXV,DPTR_NKLIN_LBYV,DPTR_XCOEFLIN_LBYV,      &
+       DPTR_NKLIN_LBXW,DPTR_XCOEFLIN_LBXW,DPTR_NKLIN_LBYW,DPTR_XCOEFLIN_LBYW,      &
+       DPTR_NKLIN_LBXM,DPTR_XCOEFLIN_LBXM,DPTR_NKLIN_LBYM,DPTR_XCOEFLIN_LBYM,      &
+       CCLOUD, LUSECHAQ, LUSECHIC,                                                 &
+       DPTR_XLBXUM,DPTR_XLBYUM,DPTR_XLBXVM,DPTR_XLBYVM,DPTR_XLBXWM,DPTR_XLBYWM,    &
+       DPTR_XLBXTHM,DPTR_XLBYTHM,                                                  &
+       DPTR_XLBXTKEM,DPTR_XLBYTKEM,                                                &
+       DPTR_XLBXRM,DPTR_XLBYRM,DPTR_XLBXSVM,DPTR_XLBYSVM                           )
+END IF
+!
+!
+!-------------------------------------------------------------------------------
+!
+!*       15.    INITIALIZE THE SCALAR VARIABLES
+!               -------------------------------
+!
+IF (LLG .AND. LINIT_LG .AND. CPROGRAM=='MESONH') &
+  CALL INI_LG(XXHAT,XYHAT,XZZ,XSVT,XLBXSVM,XLBYSVM)
+
+!
+!*       16.    BUILT THE GENERIC OUTPUT NAME
+!               ----------------------------
+!
+WRITE(COUTFILE,'(A,".",I1,".",A)') CEXP,KMI,TRIM(ADJUSTL(CSEG))
+WRITE(CFMDIAC, '(A,".",I1,".",A)') CEXP,KMI,TRIM(ADJUSTL(CSEG))//'.000'
+IF (CPROGRAM=='MESONH') THEN
+  IF ( NDAD(KMI) == 1)  CDAD_NAME(KMI) = CEXP//'.1.'//CSEG
+  IF ( NDAD(KMI) == 2)  CDAD_NAME(KMI) = CEXP//'.2.'//CSEG
+  IF ( NDAD(KMI) == 3)  CDAD_NAME(KMI) = CEXP//'.3.'//CSEG
+  IF ( NDAD(KMI) == 4)  CDAD_NAME(KMI) = CEXP//'.4.'//CSEG
+  IF ( NDAD(KMI) == 5)  CDAD_NAME(KMI) = CEXP//'.5.'//CSEG
+  IF ( NDAD(KMI) == 6)  CDAD_NAME(KMI) = CEXP//'.6.'//CSEG
+  IF ( NDAD(KMI) == 7)  CDAD_NAME(KMI) = CEXP//'.7.'//CSEG
+  IF ( NDAD(KMI) == 8)  CDAD_NAME(KMI) = CEXP//'.8.'//CSEG
+END IF
+!
+!-------------------------------------------------------------------------------
+!
+!*       17.    INITIALIZE THE PARAMETERS FOR THE DYNAMICS
+!               ------------------------------------------
+!
+CALL INI_DYNAMICS(HLUOUT,XLON,XLAT,XRHODJ,XTHVREF,XMAP,XZZ,XDXHAT,XDYHAT,     &
+             XZHAT,CLBCX,CLBCY,XTSTEP,                                        &
+             LVE_RELAX,LVE_RELAX_GRD,LHORELAX_UVWTH,LHORELAX_RV,              &
+             LHORELAX_RC,LHORELAX_RR,LHORELAX_RI,LHORELAX_RS,LHORELAX_RG,     &
+             LHORELAX_RH,LHORELAX_TKE,LHORELAX_SV,                            &
+             LHORELAX_SVC2R2,LHORELAX_SVC1R3,LHORELAX_SVELEC,LHORELAX_SVLG,   &
+             LHORELAX_SVCHEM,LHORELAX_SVAER,LHORELAX_SVDST,LHORELAX_SVSLT,    &
+             LHORELAX_SVPP,LHORELAX_SVCS,LHORELAX_SVCHIC,                     &
+#ifdef MNH_FOREFIRE
+             LHORELAX_SVFF,                                                   &
+#endif
+             XRIMKMAX,NRIMX,NRIMY,                                            &
+             XALKTOP,XALKGRD,XALZBOT,XALZBAS,                                 &
+             XT4DIFU,XT4DIFTH,XT4DIFSV,                                       &
+             XCORIOX,XCORIOY,XCORIOZ,XCURVX,XCURVY,                           &
+             XDXHATM,XDYHATM,XRHOM,XAF,XBFY,XCF,XTRIGSX,XTRIGSY,NIFAXX,NIFAXY,&
+             XALK,XALKW,NALBOT,XALKBAS,XALKWBAS,NALBAS,                       &
+             LMASK_RELAX,XKURELAX,XKVRELAX,XKWRELAX,                          &
+             XDK2U,XDK4U,XDK2TH,XDK4TH,XDK2SV,XDK4SV,                         &
+             LZDIFFU,XZDIFFU_HALO2,                                           &
+             XBFB,XBF_SXP2_YP1_Z                                              ) 
+!
+!-------------------------------------------------------------------------------
+!
+!*      18.    SURFACE FIELDS
+!              --------------
+!
+!*      18.1   Radiative setup
+!              ---------------
+!
+IF (CRAD   /= 'NONE') THEN
+  IF (CGETRAD =='INIT') THEN
+    GINIRAD  =.TRUE.
+  ELSE
+    GINIRAD  =.FALSE.
+  END IF
+  CALL INI_RADIATIONS(HINIFILE,HLUOUT,GINIRAD,TDTCUR,TDTEXP,XZZ, &
+                      XDXX, XDYY,                         &
+                      XSINDEL,XCOSDEL,XTSIDER,XCORSOL,    &
+                      XSLOPANG,XSLOPAZI,                  &
+                      XDTHRAD,XDIRFLASWD,XSCAFLASWD,      &
+                      XFLALWD,XDIRSRFSWD,NCLEARCOL_TM1,   &
+                      XZENITH,XAZIM,                      &
+                      TDTRAD_FULL,TDTRAD_CLONLY,          &
+                      TZINITHALO2D_ll,                    &
+                      XRADEFF,XSWU,XSWD,XLWU,             &
+                      XLWD,XDTHRADSW,XDTHRADLW           )
+  !
+  IF (GINIRAD) CALL SUNPOS_n(XZENITH,PAZIMSOL=XAZIM)
+  CALL SURF_SOLAR_GEOM    (XZS, XZS_XY)
+  !
+  ALLOCATE(XXHAT_ll                 (IIU_ll))
+  ALLOCATE(XYHAT_ll                 (IJU_ll))
+  ALLOCATE(XZS_ll                   (IIU_ll,IJU_ll))
+  ALLOCATE(XZS_XY_ll                (IIU_ll,IJU_ll))
+  !
+  CALL GATHERALL_FIELD_ll('XY',XZS,XZS_ll,IRESP)
+  CALL GATHERALL_FIELD_ll('XY',XZS_XY,XZS_XY_ll,IRESP)
+  CALL GATHERALL_FIELD_ll('XX',XXHAT,XXHAT_ll,IRESP)
+  CALL GATHERALL_FIELD_ll('YY',XYHAT,XYHAT_ll,IRESP)
+  XZS_MAX_ll=MAXVAL(XZS_ll)
+ELSE
+  XAZIM       = XPI
+  XZENITH     = XPI/2.
+  XDIRSRFSWD  = 0.
+  XSCAFLASWD  = 0.
+  XFLALWD     = 300.  ! W/m2
+  XTSIDER     = 0.
+END IF
+!
+!
+CALL INI_SW_SETUP (CRAD,NSWB_MNH,XSW_BANDS)
+!
+!
+!       18.1.1 Special initialisation for CO2 content
+!              CO2 (molar mass=44) horizontally and vertically homogeneous at 360 ppm
+!
+XCCO2 = 360.0E-06 * 44.0E-03 / XMD
+!
+!
+!*      18.2   Externalized surface fields
+!              ---------------------------
+!
+ALLOCATE(ZCO2(IIU,IJU))
+ZCO2(:,:) = XCCO2
+!
+
+ALLOCATE(ZDIR_ALB(IIU,IJU,NSWB_MNH))
+ALLOCATE(ZSCA_ALB(IIU,IJU,NSWB_MNH))
+ALLOCATE(ZEMIS  (IIU,IJU))
+ALLOCATE(ZTSRAD (IIU,IJU))
+!
+IF (IMASDEV>=46) THEN
+  CALL FMREAD(HINIFILE,'SURF',HLUOUT,'--',CSURF,IGRID,ILENCH,YCOMMENT,IRESP)
+ELSE
+  CSURF = "EXTE"
+END IF
+!
+!
+IF (CSURF=='EXTE' .AND. (CPROGRAM=='MESONH' .OR. CPROGRAM=='DIAG  ')) THEN
+  ! ouverture du fichier PGD
+  IF  ( LEN_TRIM(CINIFILEPGD) > 0 ) THEN
+    CALL FMOPEN_ll(CINIFILEPGD,'READ',HLUOUT,0,2,NVERB,ININAR,IRESP,OPARALLELIO=.FALSE.) 
+    IF (IRESP/=0) THEN
+      WRITE(ILUOUT,FMT=*) "INI_MODEL_n ERROR TO OPEN THE FILE CINIFILEPGD=",CINIFILEPGD
+      WRITE(ILUOUT,FMT=*) "CHECK YOUR NAMELIST NAM_LUNITn"
+    !callabortstop
+      CALL CLOSE_ll(CLUOUT,IOSTAT=IRESP)
+      CALL ABORT
+      STOP
+    ENDIF
+  ELSE
+  ! case after a spawning
+    CINIFILEPGD = HINIFILE
+  END IF
+  !
+  CALL GOTO_SURFEX(KMI)
+  !* initialization of surface
+  !
+  !
+#ifdef CPLOASIS
+  CALL SFX_OASIS_READ_NAM(CPROGRAM,XTSTEP)
+  WRITE(*,*) 'SFX-OASIS: READ NAM_SFX_SEA_CPL OK'
+#endif
+  !
+  CALL INIT_GROUND_PARAM_n ('ALL',SIZE(CSV),CSV,ZCO2,                             &
+                            XZENITH,XAZIM,XSW_BANDS,ZDIR_ALB,ZSCA_ALB,  &
+                            ZEMIS,ZTSRAD                                )
+  !
+  IF (SIZE(XEMIS)>0) THEN
+    XDIR_ALB = ZDIR_ALB
+    XSCA_ALB = ZSCA_ALB
+    XEMIS    = ZEMIS
+    XTSRAD   = ZTSRAD
+    CALL MNHGET_SURF_PARAM_n (PSEA=XSEA)                          
+  END IF
+ELSE
+  !* fields not physically necessary, but must be initialized
+  IF (SIZE(XEMIS)>0) THEN
+    XDIR_ALB = 0.
+    XSCA_ALB = 0.
+    XEMIS    = 1.
+    XTSRAD   = XTT
+    XSEA     = 1.
+  END IF
+END IF
+IF (CSURF=='EXTE' .AND. (CPROGRAM=='SPAWN ')) THEN
+  ! ouverture du fichier PGD
+  CALL FMOPEN_ll(CINIFILEPGD,'READ',HLUOUT,0,2,NVERB,ININAR,IRESP,OPARALLELIO=.FALSE.) 
+  IF (IRESP/=0) THEN
+    WRITE(ILUOUT,FMT=*) "INI_MODEL_n ERROR TO OPEN THE FILE CINIFILEPGD=",CINIFILEPGD
+    WRITE(ILUOUT,FMT=*) "CHECK YOUR NAMELIST NAM_LUNIT2_SPA"
+    !callabortstop
+    CALL CLOSE_ll(CLUOUT,IOSTAT=IRESP)
+    CALL ABORT
+    STOP
+  ENDIF
+ENDIF
+!
+  !* special case after spawning in prep_real_case
+IF (CSURF=='EXRM' .AND. CPROGRAM=='REAL  ') CSURF = 'EXTE'
+!
+DEALLOCATE(ZDIR_ALB)
+DEALLOCATE(ZSCA_ALB)
+DEALLOCATE(ZEMIS   )
+DEALLOCATE(ZTSRAD  )
+!
+DEALLOCATE(ZCO2)
+!
+!
+!* in a RESTART case, reads surface radiative quantities in the MESONH file
+!
+IF (CRAD   == 'ECMW' .AND. CGETRAD=='READ') THEN
+  CALL INI_SURF_RAD(HINIFILE, CLUOUT, XDIR_ALB, XSCA_ALB, XEMIS, XTSRAD)
+END IF
+!
+!
+!*      18.3   Mesonh fields
+!              -------------
+!
+IF (CPROGRAM/='REAL  ') CALL MNHREAD_ZS_DUMMY_n(CINIFILEPGD)
+!
+!-------------------------------------------------------------------------------
+!
+!*       19.    INITIALIZE THE PARAMETERS FOR THE PHYSICS
+!               -----------------------------------------
+!
+IF (CRAD   == 'ECMW') THEN
+!
+!* get cover mask for aerosols
+!
+  IF (CPROGRAM=='MESONH' .OR. CPROGRAM=='DIAG  ') THEN
+    ALLOCATE(ZSEA(IIU,IJU))
+    ALLOCATE(ZTOWN(IIU,IJU))
+    ALLOCATE(ZBARE(IIU,IJU))
+    IF (CSURF=='EXTE') THEN
+      CALL GOTO_SURFEX(KMI)
+      CALL MNHGET_SURF_PARAM_n(PSEA=ZSEA,PTOWN=ZTOWN,PBARE=ZBARE)
+    ELSE
+      ZSEA (:,:) = 1.
+      ZTOWN(:,:) = 0.
+      ZBARE(:,:) = 0.
+    END IF
+!
+    CALL INI_RADIATIONS_ECMWF (HINIFILE,HLUOUT,                                           &
+                               XZHAT,XPABST,XTHT,XTSRAD,XLAT,XLON,TDTCUR,TDTEXP,          &
+                               CLW,NDLON,NFLEV,NFLUX,NRAD,NSWB,CAER,NAER,NSTATM,          &
+                               XSTATM,ZSEA,ZTOWN,ZBARE,XOZON, XAER,XDST_WL, LSUBG_COND              )
+!
+    DEALLOCATE(ZSEA,ZTOWN,ZBARE)
+    ALLOCATE (XAER_CLIM(SIZE(XAER,1),SIZE(XAER,2),SIZE(XAER,3),SIZE(XAER,4)))
+    XAER_CLIM(:,:,:,:) =XAER(:,:,:,:)
+!
+  END IF
+ELSE
+  ALLOCATE (XOZON(0,0,0))
+  ALLOCATE (XAER(0,0,0,0))
+  ALLOCATE (XDST_WL(0,0,0,0))
+  ALLOCATE (XAER_CLIM(0,0,0,0))  
+END IF
+!
+!
+!
+IF (CDCONV /= 'NONE' .OR. CSCONV == 'KAFR') THEN
+  IF (CGETCONV=='INIT') THEN
+    GINIDCONV=.TRUE.
+  ELSE
+    GINIDCONV=.FALSE.
+  END IF
+!
+!  commensurability between convection calling time and time step
+!
+  XDTCONV=XTSTEP*REAL( INT( (MIN(XDTCONV,1800.)+1.E-10)/XTSTEP ) )
+  XDTCONV=MAX( XDTCONV, XTSTEP )
+  IF (NVERB>=10) THEN
+    WRITE(ILUOUT,*) 'XDTCONV has been set to : ',XDTCONV
+  END IF
+  CALL INI_DEEP_CONVECTION (HINIFILE,HLUOUT,GINIDCONV,TDTCUR,        &
+                           NCOUNTCONV,XDTHCONV,XDRVCONV,XDRCCONV,    &
+                           XDRICONV,XPRCONV,XPRSCONV,XPACCONV,       &
+                           XUMFCONV,XDMFCONV,XMFCONV,XPRLFLXCONV,XPRSFLXCONV,&
+                           XCAPE,NCLTOPCONV,NCLBASCONV,              &
+                           TDTDCONV, CGETSVCONV, XDSVCONV,           &
+                           LCH_CONV_LINOX, XIC_RATE, XCG_RATE,       &
+                           XIC_TOTAL_NUMBER, XCG_TOTAL_NUMBER        )
+
+END IF
+!
+!-------------------------------------------------------------------------------
+!
+!
+!*      19.    ALLOCATION OF THE TEMPORAL SERIES
+!              ---------------------------------
+!
+IF (LSERIES .AND. CPROGRAM/='DIAG  ') CALL INI_SERIES_n
+!
+!-------------------------------------------------------------------------------
+!
+!
+!*      20.   (re)initialize scalar variables
+!             -------------------------------
+!
+!
+IF ( LUSECHEM .OR. LCHEMDIAG ) THEN
+  IF (CPROGRAM=='MESONH'.AND.CCONF=='RESTA') LCH_INIT_FIELD =.FALSE.
+  IF (CPROGRAM=='MESONH'.OR. CPROGRAM=='DIAG  ' .OR. CPROGRAM=='IDEAL ') &
+        CALL CH_INIT_FIELD_n(KMI, ILUOUT, NVERB)
+END IF
+!
+!-------------------------------------------------------------------------------
+!
+!*      22.    UPDATE HALO
+!              -----------
+!
+!
+CALL UPDATE_HALO_ll(TZINITHALO3D_ll,IINFO_ll)
+CALL UPDATE_HALO_ll(TZINITHALO2D_ll,IINFO_ll)
+CALL CLEANLIST_ll(TZINITHALO3D_ll)
+CALL CLEANLIST_ll(TZINITHALO2D_ll)
+!
+!
+!-------------------------------------------------------------------------------
+!
+!*      23.    DEALLOCATION
+!              -------------
+!
+DEALLOCATE(ZJ)
+!
+DEALLOCATE(XSTROATM)
+DEALLOCATE(XSMLSATM)
+DEALLOCATE(XSMLWATM)
+DEALLOCATE(XSPOSATM)
+DEALLOCATE(XSPOWATM)
+!
+!-------------------------------------------------------------------------------
+!
+!*      24.     BALLOON and AIRCRAFT initializations
+!              ------------------------------------
+!
+CALL INI_AIRCRAFT_BALLOON(HINIFILE,CLUOUT,XTSTEP, TDTSEG, XSEGLEN, NRR, NSV,  &
+                          IKU,CTURB=="TKEL" ,                                 &
+                          XLATORI, XLONORI                                    )
+!
+!-------------------------------------------------------------------------------
+!
+!*      25.     STATION initializations
+!              -----------------------
+!
+CALL INI_SURFSTATION_n(CLUOUT,XTSTEP, TDTSEG, XSEGLEN, NRR, NSV,  &
+                       CTURB=="TKEL" ,                            &
+                       XLATORI, XLONORI                           )
+!
+!-------------------------------------------------------------------------------
+!
+!*      26.     PROFILER initializations
+!              ------------------------
+!
+CALL INI_POSPROFILER_n(CLUOUT,XTSTEP, TDTSEG, XSEGLEN, NRR, NSV,  &
+                       CTURB=="TKEL",                             &
+                       XLATORI, XLONORI                           )
+!
+!-------------------------------------------------------------------------------
+!
+!*      28.     Prognostic aerosols          
+!              ------------------------
+!
+CALL INI_AEROSET1
+CALL INI_AEROSET2
+CALL INI_AEROSET3
+CALL INI_AEROSET4
+CALL INI_AEROSET5
+CALL INI_AEROSET6
+#ifdef MNH_FOREFIRE
+! 
+!-------------------------------------------------------------------------------
+!
+!*      29.    FOREFIRE initializations
+!              ------------------------
+!
+
+! Coupling with ForeFire if resolution is low enough
+!---------------------------------------------------
+IF ( LFOREFIRE .AND. 0.5*(XXHAT(2)-XXHAT(1)+XYHAT(2)-XYHAT(1)) < COUPLINGRES ) THEN
+	FFCOUPLING = .TRUE.	
+ELSE
+	FFCOUPLING = .FALSE.
+ENDIF
+
+! Initializing the ForeFire variables
+!------------------------------------
+IF ( LFOREFIRE ) THEN
+	CALL INIT_FOREFIRE_n(KMI, ILUOUT, IP &
+		, TDTCUR%TDATE%YEAR, TDTCUR%TDATE%MONTH, TDTCUR%TDATE%DAY, TDTCUR%TIME, XTSTEP)
+END IF
+#endif
+
+END SUBROUTINE INI_MODEL_n
+
diff --git a/src/ARCH_SRC/CPL_WAVE/MNH/mesonh.f90 b/src/ARCH_SRC/CPL_WAVE/MNH/mesonh.f90
new file mode 100644
index 0000000000000000000000000000000000000000..10e7f11bc0fe263618d4c8e3fe7985d0da5876a1
--- /dev/null
+++ b/src/ARCH_SRC/CPL_WAVE/MNH/mesonh.f90
@@ -0,0 +1,238 @@
+!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC for details. version 1.
+!-----------------------------------------------------------------
+!--------------- special set of characters for RCS information
+!-----------------------------------------------------------------
+! $Source$ $Revision$
+!-----------------------------------------------------------------
+!     ##############
+      PROGRAM MESONH
+!     ##############
+!
+!!****  *MESONH * -general monitor of the model
+!!
+!!    PURPOSE
+!!    -------
+!! 
+!!      This program is the general monitor of the model. Firstly, it calls the 
+!!    subroutine INIT, which performs the sequential initialization of the  
+!!    nested models. Then, the program calls the temporal loops of all the 
+!!    models, by calling a recursive function which make the temporal nesting
+!!    of the different nested models. 
+!!    
+!!**  METHOD
+!!    ------
+!!
+!!      The initialization is a sequentially performed together with the
+!!    temporal loop of all the nested models. The spatial nesting can be
+!!    performed in an arbitrary way, the only constrainst is for the first model
+!!    which must contain all the others. For the moment, only 8 models can be
+!!    runned at the time and the imbriquation level can also go to this upper
+!!    value.
+!!    
+!!    
+!!
+!!    EXTERNAL
+!!    --------
+!!
+!!       subroutine INIT  : performs the sequential initialization of the nested 
+!!                         models
+!!       subroutine MODEL: choose the right MODELn to be called
+!! 
+!!       subroutine KID_MODEL: recursive function which calls the kid models
+!! 
+!!    IMPLICIT ARGUMENTS
+!!    ------------------ 
+!!
+!!    MODD_CONF:     NMODEL, NMASDEV, CPROGRAM
+!!    MODD_CONF_n:   CSTORAGE_TYPE
+!!                   
+!!
+!!    REFERENCE
+!!    ---------
+!!
+!!    NONE
+!!
+!!    AUTHOR
+!!    ------
+!!
+!!       J. STEIN  * METEO-FRANCE *
+!!
+!!    MODIFICATIONS
+!!    -------------
+!!
+!!      Original    20/10/94 
+!!      J.Stein                     08/12/94  clean the code and add the modules
+!!      J.Stein and P.Jabouille     30/04/96  add the storage_type
+!!      J.P.Lafore                  11/07/96  multi-tasking introduction for nesting
+!!      J.P.Lafore                  01/08/96  events implementation
+!!      J.P.Lafore                  17/11/97  events modification for two-way nesting
+!!      J.Stein                     08/07/98  sequential form for the nesting
+!!      J.Stein                     08/04/99  general case of the sequential form
+!!      V. Masson                   15/03/99  MASDEV number and PROGRAM name
+!!      J.P. Chaboureau             15/03/04  loop limited to 100000 iterations
+!!                                            remplaced by infinite loop
+!!      J.Escobar                 19/03/2008  rename INIT to INIT_MNH --> grib problem
+!!      J.Escobar                  6/11/2014  remove test on LCHECK otherwise never call MPPDB_INIT
+!!      J.Escobar                 15/09/2015  WENO5 & JPHEXT <> 1
+!!      G.Delautier                  06/2016  phasage surfex 8
+!!      J. Pianezze               01/08/2016  add sfxoasis coupling functions
+!-------------------------------------------------------------------------------
+!
+!*       0.     DECLARATIONS
+!               ------------
+!
+#ifdef CPLOASIS
+  USE MODD_VAR_ll, ONLY : NMNH_COMM_WORLD, IP
+  USE MODD_DYN_n, ONLY : XTSTEP
+  USE MODD_SFX_OASIS, ONLY : LOASIS_GRID
+#endif
+!
+USE MODD_CONF
+USE MODD_NESTING
+USE MODD_CONF_n
+!
+USE MODI_MODEL_n
+USE MODI_KID_MODEL
+!
+USE MODE_ll
+USE MODE_IO_ll
+USE MODE_MODELN_HANDLER
+!
+USE MODI_VERSION
+USE MODI_INIT_MNH
+USE MODD_MNH_SURFEX_n
+!
+#ifdef CPLOASIS
+  USE MODI_SFX_OASIS_INIT
+  USE MODI_MNH_OASIS_GRID
+  USE MODI_MNH_OASIS_DEFINE
+  USE MODI_SFX_OASIS_END
+#endif
+!
+USE MODE_MPPDB
+!
+IMPLICIT NONE 
+!
+!*       0.1    declarations of local variables
+!
+INTEGER       :: JMODEL                       ! loop index 
+INTEGER       :: ITEMP_MODEL1                 ! loop increment 
+LOGICAL       :: GEXIT                        ! flag for the end of the
+                                              ! temporal loop       
+INTEGER       :: IINFO_ll                     ! return code of // routines
+!
+#ifdef CPLOASIS
+  CHARACTER(LEN=28)  :: CNAMELIST
+  LOGICAL            :: L_MASTER
+#endif
+!
+!-------------------------------------------------------------------------------
+!
+!*       1.    INITIALIZATION
+!              --------------
+! Switch to model 1 variables
+#ifndef CPLOASIS
+CALL MPPDB_INIT()
+#endif
+!
+CALL GOTO_MODEL(1)
+!
+#ifdef CPLOASIS
+  CNAMELIST='EXSEG1.nam'
+  CALL SFX_OASIS_INIT(CNAMELIST, NMNH_COMM_WORLD)
+#endif
+!
+CALL INITIO_ll()
+!
+CALL VERSION
+CPROGRAM='MESONH'
+!
+CALL INIT_MNH
+!
+!
+GEXIT=.FALSE.
+!
+!
+!*         1.1   INITIALIZATION GRID OASIS
+!                -------------------------
+!
+!
+#ifdef CPLOASIS
+IF(IP==1) THEN
+  L_MASTER=.TRUE.
+ELSE
+  L_MASTER=.FALSE.
+END IF
+!
+IF (LOASIS_GRID) THEN
+  CALL MNH_OASIS_GRID(L_MASTER,NMNH_COMM_WORLD)
+ENDIF
+#endif
+!
+!
+!*         1.2   INITIALIZATION PARTITION OASIS
+!                ------------------------------
+!
+#ifdef CPLOASIS
+  CALL MNH_OASIS_DEFINE(CPROGRAM,IP)
+#endif
+!
+!-------------------------------------------------------------------------------
+!
+!*       2.    TEMPORAL LOOP 
+!              -------------
+!
+DO JMODEL=1,NMODEL
+  CALL GO_TOMODEL_ll(JMODEL,IINFO_ll)
+  CALL GOTO_MODEL(JMODEL)
+  CSTORAGE_TYPE='TT'
+  CALL MODEL_n(1,GEXIT)
+END DO
+!
+IF(GEXIT) THEN
+   !callabortstop
+  CALL ABORT
+  STOP
+ENDIF
+!
+ITEMP_MODEL1=1
+DO
+  ITEMP_MODEL1=ITEMP_MODEL1+1
+  !
+  CALL GO_TOMODEL_ll(1,IINFO_ll)
+  CALL GOTO_MODEL(1)
+  CALL MODEL_n(ITEMP_MODEL1,GEXIT)
+  !
+  CALL KID_MODEL(1,ITEMP_MODEL1,GEXIT)
+  !
+  IF(GEXIT) EXIT
+  !
+END DO
+!
+!-------------------------------------------------------------------------------
+!
+!*       3.    FINALIZE THE PARALLEL SESSION
+!              -----------------------------
+!
+IF (LCHECK) THEN
+  CALL MPPDB_BARRIER()
+ELSE
+  CALL END_PARA_ll(IINFO_ll)
+#ifdef CPLOASIS
+  CALL SFX_OASIS_END 
+#endif
+END IF
+!
+!
+CALL SURFEX_DEALLO_LIST
+!
+!-------------------------------------------------------------------------------
+!
+!callabortstop
+!CALL ABORT
+STOP
+!
+END PROGRAM MESONH  
diff --git a/src/ARCH_SRC/CPL_WAVE/MNH/mnh_oasis_define.F90 b/src/ARCH_SRC/CPL_WAVE/MNH/mnh_oasis_define.F90
new file mode 100755
index 0000000000000000000000000000000000000000..a5e6f3bf4bd4cae27f7ee169e077acf122d76e16
--- /dev/null
+++ b/src/ARCH_SRC/CPL_WAVE/MNH/mnh_oasis_define.F90
@@ -0,0 +1,148 @@
+!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC for details. version 1.
+!     ##########
+MODULE MODI_MNH_OASIS_DEFINE
+!     ##########
+!
+INTERFACE 
+!
+      SUBROUTINE MNH_OASIS_DEFINE(HPROGRAM,IP)
+!
+      CHARACTER(LEN=6),   INTENT(IN)  :: HPROGRAM   ! program calling surf. schemes
+      INTEGER,            INTENT(IN)  :: IP         ! nb current proc.
+!
+      END SUBROUTINE MNH_OASIS_DEFINE
+!
+END INTERFACE
+!
+END MODULE MODI_MNH_OASIS_DEFINE
+!
+!     ####################################################################
+SUBROUTINE MNH_OASIS_DEFINE(HPROGRAM,IP)
+!     ####################################################################
+!
+!
+!!****  *MNH_OASIS_DEFINE*
+!!
+!!    PURPOSE
+!!    -------
+!!    Define the mpi partition for OASIS coupling
+!!
+!!**  METHOD
+!!    ------
+!!
+!!    EXTERNAL
+!!    --------
+!!
+!!
+!!    IMPLICIT ARGUMENTS
+!!    ------------------
+!!
+!!    REFERENCE
+!!    ---------
+!!
+!!
+!!    AUTHOR
+!!    ------
+!!	J. Pianezze   *LPO*	
+!!
+!!    MODIFICATIONS
+!!    -------------
+!!      Original    09/2014
+!-------------------------------------------------------------------------------
+!
+!*       0.    DECLARATIONS
+!              ------------
+!
+#ifdef CPLOASIS
+USE MODI_SFX_OASIS_DEFINE
+USE MODD_DIM_n, ONLY : NIMAX, NJMAX, NIMAX_ll, NJMAX_ll
+USE MOD_OASIS
+USE MODD_MNH_SURFEX_n
+#endif
+!
+USE MODE_ll
+!
+IMPLICIT NONE
+!
+!*       0.1   Declarations of arguments
+!              -------------------------
+!
+CHARACTER(LEN=6),   INTENT(IN)  :: HPROGRAM   ! program calling surf. schemes
+INTEGER,            INTENT(IN)  :: IP         ! nb current proc.
+!
+!*       0.2   Declarations of local variables
+!              -------------------------------
+!
+#ifdef CPLOASIS
+INTEGER, DIMENSION(:), ALLOCATABLE :: IPARAL
+INTEGER, DIMENSION(:), ALLOCATABLE :: ISEG_SIZE
+INTEGER, DIMENSION(:), ALLOCATABLE :: ISEG_OFFSET
+!
+INTEGER :: JI, JSEG
+INTEGER :: ISEGMENT, INPAR, INPTS
+INTEGER :: IIOR, IJOR
+#endif
+!
+!-------------------------------------------------------------------------------
+#ifdef CPLOASIS
+!-------------------------------------------------------------------------------
+!
+CALL GET_OR_ll('B',IIOR,IJOR)
+!
+!*       1.     Define ORANGE parallel partitions:
+!               ----------------------------------
+!
+! Number of segments for this proc
+!
+ISEGMENT=NJMAX
+!  
+INPAR=2+2*ISEGMENT
+!
+! Local offset and extent for this proc
+!
+ALLOCATE(ISEG_SIZE  (ISEGMENT))
+ALLOCATE(ISEG_OFFSET(ISEGMENT))
+ALLOCATE(IPARAL(INPAR))
+!
+! OASIS orange partition
+!
+IPARAL(CLIM_STRATEGY) = CLIM_ORANGE
+!
+! Number of proc segments for OASIS
+!
+IPARAL(2) = ISEGMENT
+!
+! Local offset and extent for OASIS
+!
+JI=2
+INPTS=0
+DO JSEG=1,ISEGMENT
+   JI=JI+1
+   IPARAL(JI) = (IIOR - 1) + NIMAX_ll*(IJOR -1) + NIMAX_ll*(JSEG-1)
+   JI=JI+1
+   IPARAL(JI) = NIMAX
+ENDDO
+!  
+INPTS=NIMAX*NJMAX
+!
+DEALLOCATE(ISEG_SIZE  )
+DEALLOCATE(ISEG_OFFSET)
+!
+!
+!*       2.     Put definitions for exchange of coupling fields :
+!               -------------------------------------------------
+!
+CALL SFX_OASIS_DEFINE(YSURF_CUR%IM%I, YSURF_CUR%U, &
+                      HPROGRAM,INPTS, IPARAL        )
+!
+DEALLOCATE(IPARAL)
+!
+!-------------------------------------------------------------------------------
+#endif
+!
+!-------------------------------------------------------------------------------
+!
+END SUBROUTINE MNH_OASIS_DEFINE
diff --git a/src/ARCH_SRC/CPL_WAVE/MNH/mnh_oasis_grid.F90 b/src/ARCH_SRC/CPL_WAVE/MNH/mnh_oasis_grid.F90
new file mode 100755
index 0000000000000000000000000000000000000000..1695eddadce4275e1f5e1113e8a247b837678290
--- /dev/null
+++ b/src/ARCH_SRC/CPL_WAVE/MNH/mnh_oasis_grid.F90
@@ -0,0 +1,339 @@
+!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC for details. version 1.
+!     ##########
+MODULE MODI_MNH_OASIS_GRID
+!     ##########
+!
+INTERFACE 
+!
+      SUBROUTINE MNH_OASIS_GRID(OD_MASTER,KD_LCOMM)
+!
+      LOGICAL, INTENT(IN) :: OD_MASTER                  ! MASTER process or not
+      INTEGER, INTENT(IN) :: KD_LCOMM                   ! Model local communicator
+!
+      END SUBROUTINE MNH_OASIS_GRID
+!
+END INTERFACE
+!
+END MODULE MODI_MNH_OASIS_GRID
+!
+!     ####################################################################
+SUBROUTINE MNH_OASIS_GRID(OD_MASTER,KD_LCOMM)
+!     ####################################################################
+!
+!
+!!****  *MNH_OASIS_GRID*
+!!
+!!    PURPOSE
+!!    -------
+!!    Define the grids for OASIS coupling
+!!    The grids definition for the hydrological coupling part has to be coded
+!!    (cf. sfx_oasis_prep.F90).
+!!
+!!**  METHOD
+!!    ------
+!!
+!!    EXTERNAL
+!!    --------
+!!
+!!
+!!    IMPLICIT ARGUMENTS
+!!    ------------------
+!!
+!!    REFERENCE
+!!    ---------
+!!
+!!
+!!    AUTHOR
+!!    ------
+!!	J. Pianezze   *LOPS*	
+!!
+!!    MODIFICATIONS
+!!    -------------
+!!      Original    08/2016
+!-------------------------------------------------------------------------------
+!
+!*     0.     Declarations
+!             ------------
+!
+!
+#ifdef CPLOASIS
+USE MOD_OASIS
+#endif
+!
+USE MODD_PARAMETERS,  ONLY : XUNDEF
+USE MODD_IO_SURF_MNH, ONLY : NHALO, NLUOUT
+USE MODD_CST,         ONLY : XPI, XRADIUS
+USE MODD_DIM_n,       ONLY : NIMAX_ll, NJMAX_ll, NIMAX, NJMAX
+USE MODD_PARAMETERS,  ONLY : JPHEXT
+USE MODD_GRID_n,      ONLY : XLAT, XLON 
+USE MODD_VAR_ll,      ONLY : NMNH_COMM_WORLD
+USE MODD_SFX_OASIS
+USE MODD_MNH_SURFEX_n
+USE MODD_MPIF
+!
+USE MODI_GET_FRAC_N
+!
+USE MODE_GATHER_ll
+USE MODE_ll
+!
+!*      0.1   Declarations of argument
+! ------------------------------------------------
+LOGICAL, INTENT(IN) :: OD_MASTER                  ! MASTER process or not
+INTEGER, INTENT(IN) :: KD_LCOMM                   ! Model local communicator
+!
+!*      0.2  Declaration of local parameters
+! ------------------------------------------------
+!
+INTEGER,           PARAMETER  :: INC = 4    ! Number of grid-cell corners
+!
+CHARACTER(LEN=4),  PARAMETER  :: YSFX_LAND = 'slan'
+CHARACTER(LEN=4),  PARAMETER  :: YSFX_LAKE = 'slak'
+CHARACTER(LEN=4),  PARAMETER  :: YSFX_SEA  = 'ssea'
+!
+!*      0.2  Declaration of local variables
+! ------------------------------------------------
+INTEGER :: JI, JJ ! loop index
+INTEGER :: IIU, IJU, ILU
+INTEGER :: IIU_ll, IJU_ll
+INTEGER :: IERROR
+!
+REAL :: ZPHI, ZRADEG
+REAL :: ZXBOX, ZYBOX
+!
+REAL, DIMENSION(NIMAX_ll,NJMAX_ll,INC) :: ZCLON, ZCLAT
+REAL, DIMENSION(NIMAX_ll,NJMAX_ll)    :: ZAREA
+REAL, DIMENSION(NIMAX_ll,NJMAX_ll)    :: ZDX, ZDY
+REAL, ALLOCATABLE, DIMENSION(:,:)    :: ZSEA, ZWATER
+REAL, ALLOCATABLE, DIMENSION(:,:)    :: ZTOWN, ZNATURE
+!
+REAL, ALLOCATABLE, DIMENSION(:)    :: ZWATER1D
+REAL, ALLOCATABLE, DIMENSION(:)    :: ZNATURE1D
+REAL, ALLOCATABLE, DIMENSION(:)    :: ZTOWN1D
+REAL, ALLOCATABLE, DIMENSION(:)    :: ZSEA1D
+!
+REAL, ALLOCATABLE, DIMENSION(:,:,:) :: ZLAT_GLOBAL, ZLON_GLOBAL
+REAL, ALLOCATABLE, DIMENSION(:,:,:) :: ZSEA_GLOBAL, ZWATER_GLOBAL
+REAL, ALLOCATABLE, DIMENSION(:,:,:) :: ZTOWN_GLOBAL, ZNATURE_GLOBAL
+!
+INTEGER, DIMENSION(NIMAX_ll,NJMAX_ll) :: ZMASK_LAND
+INTEGER, DIMENSION(NIMAX_ll,NJMAX_ll) :: ZMASK_LAKE
+INTEGER, DIMENSION(NIMAX_ll,NJMAX_ll) :: ZMASK_SEA
+!
+!-------------------------------------------------------------------------------
+!
+!*     1.     Initialize :
+!             ------------
+!
+CALL GET_DIM_EXT_ll('B',IIU,IJU)
+CALL GET_INDICE_ll (IIB,IJB,IIE,IJE)
+!
+IIU_ll=NIMAX_ll+2*JPHEXT
+IJU_ll=NJMAX_ll+2*JPHEXT
+ILU = (IIE-IIB+1+2*NHALO)*(IJE-IJB+1+2*NHALO)
+!
+ALLOCATE(ZLAT_GLOBAL(IIU_ll,IJU_ll,1))
+ALLOCATE(ZLON_GLOBAL(IIU_ll,IJU_ll,1))
+!
+ALLOCATE(ZSEA_GLOBAL   (IIU_ll,IJU_ll,1))
+ALLOCATE(ZWATER_GLOBAL (IIU_ll,IJU_ll,1))
+ALLOCATE(ZNATURE_GLOBAL(IIU_ll,IJU_ll,1))
+ALLOCATE(ZTOWN_GLOBAL  (IIU_ll,IJU_ll,1))
+!
+ALLOCATE(ZSEA    (IIU,IJU))
+ALLOCATE(ZWATER  (IIU,IJU))
+ALLOCATE(ZNATURE (IIU,IJU))
+ALLOCATE(ZTOWN   (IIU,IJU))
+!
+ALLOCATE(ZSEA1D    ( ILU ))
+ALLOCATE(ZWATER1D  ( ILU ))
+ALLOCATE(ZNATURE1D ( ILU ))
+ALLOCATE(ZTOWN1D   ( ILU ))
+!
+!-------------------------------------------------------------------------------
+!
+!*     2.     Get grid definition :
+!             ---------------------
+!
+!
+!*     2.1    Get lat/lon :
+!             -------------
+CALL GATHER_XYFIELD(XLON,ZLON_GLOBAL(:,:,1),1,NMNH_COMM_WORLD)
+CALL GATHER_XYFIELD(XLAT,ZLAT_GLOBAL(:,:,1),1,NMNH_COMM_WORLD)
+!
+!*     2.2    Get corners :
+!             -------------
+ZXBOX=ZLON_GLOBAL(2,2,1)-ZLON_GLOBAL(2,1,1)
+ZCLON(:,:,1)=ZLON_GLOBAL(2:NIMAX_ll+1,2:NJMAX_ll+1,1)+ZXBOX/2.
+ZCLON(:,:,2)=ZLON_GLOBAL(2:NIMAX_ll+1,2:NJMAX_ll+1,1)-ZXBOX/2.
+ZCLON(:,:,3)=ZLON_GLOBAL(2:NIMAX_ll+1,2:NJMAX_ll+1,1)-ZXBOX/2.
+ZCLON(:,:,4)=ZLON_GLOBAL(2:NIMAX_ll+1,2:NJMAX_ll+1,1)+ZXBOX/2.
+!
+ZYBOX=ZLAT_GLOBAL(2,2,1)-ZLAT_GLOBAL(1,2,1)
+ZCLAT(:,:,1)=ZLAT_GLOBAL(2:NIMAX_ll+1,2:NJMAX_ll+1,1)+ZYBOX/2.
+ZCLAT(:,:,2)=ZLAT_GLOBAL(2:NIMAX_ll+1,2:NJMAX_ll+1,1)+ZYBOX/2.
+ZCLAT(:,:,3)=ZLAT_GLOBAL(2:NIMAX_ll+1,2:NJMAX_ll+1,1)-ZYBOX/2.
+ZCLAT(:,:,4)=ZLAT_GLOBAL(2:NIMAX_ll+1,2:NJMAX_ll+1,1)-ZYBOX/2.
+!
+!
+!*     2.3    Compute area :
+!             -------------
+! Radian to degree
+ZRADEG = XPI/180.0
+!
+DO JJ=1,NJMAX_ll
+  DO JI =1,NIMAX_ll
+    ZPHI = ZLAT_GLOBAL(JI+1,JJ+1,1)
+!
+    ZDX(JI,JJ)=XRADIUS*COS(ZPHI*ZRADEG)*(ZLON_GLOBAL(JI+1,JJ+1,1)-ZLON_GLOBAL(JI,JJ+1,1))*ZRADEG
+    ZDY(JI,JJ)=XRADIUS*(ZLAT_GLOBAL(JI+1,JJ+1,1)-ZLAT_GLOBAL(JI+1,JJ,1))*ZRADEG
+!
+  ENDDO
+ENDDO
+!
+ZAREA(:,:)=ZDY(:,:)*ZDX(:,:)
+!
+!-------------------------------------------------------------------------------
+!
+!*     3.     Compute masks
+!             -------------
+!
+CALL GET_FRAC_n(YSURF_CUR%U,'MESONH',ILU,ZSEA1D,ZWATER1D,ZNATURE1D,ZTOWN1D)
+CALL REMOVE_HALO(ZSEA1D,ZSEA)
+CALL REMOVE_HALO(ZWATER1D,ZWATER)
+CALL REMOVE_HALO(ZNATURE1D,ZNATURE)
+CALL REMOVE_HALO(ZTOWN1D,ZTOWN)
+!
+CALL GATHER_XYFIELD(ZSEA,ZSEA_GLOBAL(:,:,1),1,NMNH_COMM_WORLD)
+CALL GATHER_XYFIELD(ZWATER,ZWATER_GLOBAL(:,:,1),1,NMNH_COMM_WORLD)
+CALL GATHER_XYFIELD(ZNATURE,ZNATURE_GLOBAL(:,:,1),1,NMNH_COMM_WORLD)
+CALL GATHER_XYFIELD(ZTOWN,ZTOWN_GLOBAL(:,:,1),1,NMNH_COMM_WORLD)
+!
+!*       3.1    Mask for Land surface :
+!               ----------------------- 
+ZMASK_LAND(:,:)=1
+DO JJ=1,NJMAX_ll
+  DO JI=1,NIMAX_ll
+    IF ( (ZNATURE_GLOBAL(JI+1,JJ+1,1)+ZTOWN_GLOBAL(JI+1,JJ+1,1)) /= 0 ) ZMASK_LAND(JI,JJ)=0
+  ENDDO
+ENDDO
+!
+!*       3.2    Mask for Lake surface :
+!               ----------------------- 
+ZMASK_LAKE(:,:)=1
+DO JJ=1,NJMAX_ll
+  DO JI=1,NIMAX_ll
+    IF ( ZWATER_GLOBAL(JI+1,JJ+1,1) /= 0 ) ZMASK_LAKE(JI,JJ)=0
+  ENDDO
+ENDDO
+!
+!*       3.3    Mask for sea/water/wave surface :
+!               ---------------------------------
+ZMASK_SEA(:,:)=1
+DO JJ=1,NJMAX_ll
+  DO JI=1,NIMAX_ll
+    IF ( ZSEA_GLOBAL(JI+1,JJ+1,1) /= 0 ) ZMASK_SEA(JI,JJ)=0
+  ENDDO ! XSEA=0: land, XSEA=1: sea, XSEA=2: sea-ice
+ENDDO
+!
+CALL MPI_BARRIER(KD_LCOMM, IERROR)
+!
+!-------------------------------------------------------------------------------
+!
+!*    4.     Write grid definition :
+!            -----------------------
+!
+!
+IF (OD_MASTER) THEN
+!
+  CALL OASIS_START_GRIDS_WRITING(IERROR)
+!
+!*       4.1    Grid definition for Land surface :
+!               ----------------------------------
+!
+  IF (LCPL_LAND) THEN
+    CALL OASIS_WRITE_GRID (YSFX_LAND, NIMAX_ll, NJMAX_ll,             &
+                           ZLON_GLOBAL(2:NIMAX_ll+1,2:NJMAX_ll+1,1), &
+                           ZLAT_GLOBAL(2:NIMAX_ll+1,2:NJMAX_ll+1,1)  )
+    CALL OASIS_WRITE_CORNER(YSFX_LAND, NIMAX_ll, NJMAX_ll, INC, ZCLON, ZCLAT)   
+    CALL OASIS_WRITE_AREA(YSFX_LAND, NIMAX_ll, NJMAX_ll, ZAREA)
+    CALL OASIS_WRITE_MASK(YSFX_LAND, NIMAX_ll, NJMAX_ll, ZMASK_LAND)
+  ENDIF
+!
+!*       4.2    Grid definition for lake surface :
+!               ----------------------------------
+!
+  IF (LCPL_LAKE) THEN
+    CALL OASIS_WRITE_GRID (YSFX_LAKE, NIMAX_ll, NJMAX_ll,             &
+                           ZLON_GLOBAL(2:NIMAX_ll+1,2:NJMAX_ll+1,1), &
+                           ZLAT_GLOBAL(2:NIMAX_ll+1,2:NJMAX_ll+1,1)  )
+    CALL OASIS_WRITE_CORNER(YSFX_LAKE, NIMAX_ll, NJMAX_ll, INC, ZCLON, ZCLAT)   
+    CALL OASIS_WRITE_AREA(YSFX_LAKE, NIMAX_ll, NJMAX_ll, ZAREA)
+    CALL OASIS_WRITE_MASK(YSFX_LAKE, NIMAX_ll, NJMAX_ll, ZMASK_LAKE)
+  ENDIF
+!
+!
+!*       4.3    Grid definition for sea/water :
+!               -------------------------------
+  IF (LCPL_SEA .OR. LCPL_WAVE) THEN
+    CALL OASIS_WRITE_GRID (YSFX_SEA, NIMAX_ll, NJMAX_ll,             &
+                           ZLON_GLOBAL(2:NIMAX_ll+1,2:NJMAX_ll+1,1), &
+                           ZLAT_GLOBAL(2:NIMAX_ll+1,2:NJMAX_ll+1,1)  )
+    CALL OASIS_WRITE_CORNER(YSFX_SEA, NIMAX_ll, NJMAX_ll, INC, ZCLON, ZCLAT)   
+    CALL OASIS_WRITE_AREA(YSFX_SEA, NIMAX_ll, NJMAX_ll, ZAREA)
+    CALL OASIS_WRITE_MASK(YSFX_SEA, NIMAX_ll, NJMAX_ll, ZMASK_SEA)
+  ENDIF
+!
+!-------------------------------------------------------------------------------
+!
+!*    5.     Terminate grid definition :
+!            -----------------------
+  CALL OASIS_TERMINATE_GRIDS_WRITING()
+!
+ENDIF
+!
+DEALLOCATE(ZLAT_GLOBAL)
+DEALLOCATE(ZLON_GLOBAL)
+!
+DEALLOCATE(ZSEA_GLOBAL)
+DEALLOCATE(ZWATER_GLOBAL)
+DEALLOCATE(ZNATURE_GLOBAL)
+DEALLOCATE(ZTOWN_GLOBAL)
+!
+DEALLOCATE(ZSEA)
+DEALLOCATE(ZWATER)
+DEALLOCATE(ZNATURE)
+DEALLOCATE(ZTOWN)
+!
+DEALLOCATE(ZSEA1D)
+DEALLOCATE(ZWATER1D)
+DEALLOCATE(ZNATURE1D)
+DEALLOCATE(ZTOWN1D)
+!
+CALL MPI_BARRIER(KD_LCOMM, IERROR)
+!
+!==============================================================================
+!
+CONTAINS
+!
+SUBROUTINE REMOVE_HALO(PFIELD,POUT)
+!
+REAL, DIMENSION(:),   INTENT(IN)  :: PFIELD
+REAL, DIMENSION(:,:), INTENT(OUT) :: POUT
+!
+INTEGER :: JI, JJ
+!
+POUT=XUNDEF
+!
+DO JJ=IJB,IJE
+  DO JI=IIB,IIE
+    POUT(JI,JJ) = PFIELD( JI-IIB+1 + NHALO + (JJ-IJB+NHALO)*(IIE-IIB+1+2*NHALO))
+  END DO
+END DO
+!
+END SUBROUTINE REMOVE_HALO
+!
+END SUBROUTINE MNH_OASIS_GRID
+!!======================================================================
diff --git a/src/ARCH_SRC/CPL_WAVE/MNH/mnh_oasis_recv.F90 b/src/ARCH_SRC/CPL_WAVE/MNH/mnh_oasis_recv.F90
new file mode 100755
index 0000000000000000000000000000000000000000..0f70e127eb9dd55af4bc0f4bf0eb0320236f8dd4
--- /dev/null
+++ b/src/ARCH_SRC/CPL_WAVE/MNH/mnh_oasis_recv.F90
@@ -0,0 +1,252 @@
+!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC for details. version 1.
+!     ##########
+MODULE MODI_MNH_OASIS_RECV
+!     ##########
+!
+INTERFACE 
+!
+      SUBROUTINE MNH_OASIS_RECV(HPROGRAM,KI,KSW,PTIMEC,PTSTEP_SURF,   &
+                             PZENITH,PSW_BANDS,          &
+                             PTSRAD,PDIR_ALB,PSCA_ALB,PEMIS,PTSURF)
+!
+      CHARACTER(LEN=6),      INTENT(IN)  :: HPROGRAM    ! program calling surf. schemes
+!
+      INTEGER,               INTENT(IN)  :: KI          ! number of points on this proc
+      INTEGER,               INTENT(IN)  :: KSW         ! number of short-wave spectral bands
+      REAL,                  INTENT(IN)  :: PTIMEC      ! Cumulated run time step (s)
+      REAL,                  INTENT(IN)  :: PTSTEP_SURF ! Surfex time step
+!
+      REAL, DIMENSION(:),    INTENT(IN)  :: PZENITH     ! zenithal angle       (radian from the vertical)
+      REAL, DIMENSION(:),    INTENT(IN)  :: PSW_BANDS   ! mean wavelength of each shortwave band (m)
+!
+      REAL, DIMENSION(:),    INTENT(OUT) :: PTSRAD      ! radiative temperature                 (K)
+      REAL, DIMENSION(:,:),  INTENT(OUT) :: PDIR_ALB    ! direct albedo for each spectral band  (-)
+      REAL, DIMENSION(:,:),  INTENT(OUT) :: PSCA_ALB    ! diffuse albedo for each spectral band (-)
+      REAL, DIMENSION(:),    INTENT(OUT) :: PEMIS       ! emissivity                            (-)
+      REAL, DIMENSION(:),    INTENT(OUT) :: PTSURF      ! surface effective temperature         (K)
+!
+      END SUBROUTINE MNH_OASIS_RECV
+!
+END INTERFACE
+!
+END MODULE MODI_MNH_OASIS_RECV
+!
+!     ####################################################################
+SUBROUTINE MNH_OASIS_RECV   (HPROGRAM,KI,KSW,PTIMEC,PTSTEP_SURF,   &
+                             PZENITH,PSW_BANDS,          &
+                             PTSRAD,PDIR_ALB,PSCA_ALB,PEMIS,PTSURF )
+!#############################################
+!
+!!****  *MNH_OASIS_RECV*
+!!
+!!    PURPOSE
+!!    -------
+!!    Meso-NH driver that receive coupling fields from oasis
+!!
+!!**  METHOD
+!!    ------
+!!
+!!    EXTERNAL
+!!    --------
+!!
+!!
+!!    IMPLICIT ARGUMENTS
+!!    ------------------
+!!
+!!    REFERENCE
+!!    ---------
+!!
+!!
+!!    AUTHOR
+!!    ------
+!!	J. Pianezze   *LPO*	
+!!
+!!    MODIFICATIONS
+!!    -------------
+!!      Original    09/2014
+!-------------------------------------------------------------------------------
+!
+!*       0.    DECLARATIONS
+!              ------------
+!
+USE MODN_SFX_OASIS,  ONLY : XTSTEP_CPL_LAND, &
+                            XTSTEP_CPL_SEA,  &
+                            XTSTEP_CPL_WAVE,  &
+                            LWATER
+!
+USE MODD_SFX_OASIS,  ONLY : LCPL_LAND,         &
+                            LCPL_GW,LCPL_FLOOD,&
+                            LCPL_SEA,          &
+                            LCPL_SEAICE,       &
+                            LCPL_WAVE
+!
+USE MODD_SURF_PAR,   ONLY : XUNDEF
+USE MODD_MNH_SURFEX_n
+!
+USE MODI_GET_LUOUT
+USE MODI_GOTO_SURFEX
+USE MODI_SFX_OASIS_RECV
+USE MODI_PUT_SFX_LAND
+USE MODI_PUT_SFX_SEA
+USE MODI_PUT_SFX_WAVE
+USE MODI_UPDATE_ESM_SURF_ATM_n
+!
+IMPLICIT NONE
+!
+!*       0.1   Declarations of arguments
+!              -------------------------
+!
+CHARACTER(LEN=6),       INTENT(IN)  :: HPROGRAM    ! program calling surf. schemes
+!
+INTEGER,                INTENT(IN)  :: KI          ! number of points on this proc
+INTEGER,                INTENT(IN)  :: KSW         ! number of short-wave spectral bands
+REAL,                   INTENT(IN)  :: PTIMEC      ! Cumulated run time step (s)
+REAL,                   INTENT(IN)  :: PTSTEP_SURF ! Surfex time step
+!
+REAL, DIMENSION(:),    INTENT(IN)  :: PZENITH   ! zenithal angle       (radian from the vertical)
+REAL, DIMENSION(:),    INTENT(IN)  :: PSW_BANDS ! mean wavelength of each shortwave band (m)
+!
+REAL, DIMENSION(:),    INTENT(OUT) :: PTSRAD    ! radiative temperature                 (K)
+REAL, DIMENSION(:,:),  INTENT(OUT) :: PDIR_ALB  ! direct albedo for each spectral band  (-)
+REAL, DIMENSION(:,:),  INTENT(OUT) :: PSCA_ALB  ! diffuse albedo for each spectral band (-)
+REAL, DIMENSION(:),    INTENT(OUT) :: PEMIS     ! emissivity                            (-)
+REAL, DIMENSION(:),    INTENT(OUT) :: PTSURF    ! surface effective temperature         (K)
+!
+!
+!*       0.2   Declarations of local variables
+!              -------------------------------
+!
+REAL, DIMENSION(KI) :: ZLAND_WTD     ! Land water table depth (m)
+REAL, DIMENSION(KI) :: ZLAND_FWTD    ! Land grid-cell fraction of water table rise (-)
+REAL, DIMENSION(KI) :: ZLAND_FFLOOD  ! Land Floodplains fraction (-)
+REAL, DIMENSION(KI) :: ZLAND_PIFLOOD ! Land Potential flood infiltration(kg/m2/s)
+REAL, DIMENSION(KI) :: ZSEA_SST      ! Sea surface temperature (K)
+REAL, DIMENSION(KI) :: ZSEA_UCU      ! Sea u-current stress (Pa)
+REAL, DIMENSION(KI) :: ZSEA_VCU      ! Sea v-current stress (Pa)
+REAL, DIMENSION(KI) :: ZSEAICE_SIT   ! Sea-ice Temperature (K)
+REAL, DIMENSION(KI) :: ZSEAICE_CVR   ! Sea-ice cover (-)
+REAL, DIMENSION(KI) :: ZSEAICE_ALB   ! Sea-ice albedo (-)
+REAL, DIMENSION(KI) :: ZWAVE_CHA     ! Charnock coefficient (-)
+REAL, DIMENSION(KI) :: ZWAVE_UCU     ! u-current velocity (m/s)
+REAL, DIMENSION(KI) :: ZWAVE_VCU     ! v-current velocity (m/s)
+REAL, DIMENSION(KI) :: ZWAVE_HS      ! Significant wave height (m)
+REAL, DIMENSION(KI) :: ZWAVE_TP      ! Peak period (s)
+!
+INTEGER             :: ILUOUT
+REAL                :: ZTIME_CPL
+!
+LOGICAL             :: GRECV_LAND
+LOGICAL             :: GRECV_FLOOD
+LOGICAL             :: GRECV_SEA
+LOGICAL             :: GRECV_WAVE
+!
+CALL GET_LUOUT(HPROGRAM,ILUOUT)
+!
+!-------------------------------------------------------------------------------
+!
+!*       1.     init coupling fields:
+!               ----------------------------------
+!
+ZTIME_CPL = PTIMEC-PTSTEP_SURF
+!
+GRECV_LAND =(LCPL_LAND .AND. MOD(ZTIME_CPL,XTSTEP_CPL_LAND)==0.0)
+GRECV_SEA  =(LCPL_SEA  .AND. MOD(ZTIME_CPL,XTSTEP_CPL_SEA )==0.0)
+GRECV_WAVE =(LCPL_WAVE .AND. MOD(ZTIME_CPL,XTSTEP_CPL_WAVE)==0.0)
+!
+IF(GRECV_LAND)THEN
+  ZLAND_WTD    (:) = XUNDEF
+  ZLAND_FWTD   (:) = XUNDEF
+  ZLAND_FFLOOD (:) = XUNDEF
+  ZLAND_PIFLOOD(:) = XUNDEF
+ENDIF
+!
+IF(GRECV_SEA)THEN
+  ZSEA_SST   (:) = XUNDEF
+  ZSEA_UCU   (:) = XUNDEF
+  ZSEA_VCU   (:) = XUNDEF
+  ZSEAICE_SIT(:) = XUNDEF
+  ZSEAICE_CVR(:) = XUNDEF
+  ZSEAICE_ALB(:) = XUNDEF
+ENDIF
+!
+IF(GRECV_WAVE)THEN
+  ZWAVE_CHA(:) = XUNDEF
+  ZWAVE_UCU(:)  = XUNDEF
+  ZWAVE_VCU(:)  = XUNDEF
+  ZWAVE_HS(:)  = XUNDEF
+  ZWAVE_TP(:)  = XUNDEF
+ENDIF
+!
+!
+!*       2.     Receive fields to other models proc by proc:
+!               --------------------------------------------
+!
+CALL SFX_OASIS_RECV(HPROGRAM,KI,KSW,ZTIME_CPL,        &
+                    GRECV_LAND, GRECV_SEA, GRECV_WAVE, &
+                    ZLAND_WTD    (:),ZLAND_FWTD   (:), &
+                    ZLAND_FFLOOD (:),ZLAND_PIFLOOD(:), &
+                    ZSEA_SST     (:),ZSEA_UCU     (:), &
+                    ZSEA_VCU     (:),ZSEAICE_SIT  (:), &
+                    ZSEAICE_CVR  (:),ZSEAICE_ALB  (:), &
+                    ZWAVE_CHA    (:),ZWAVE_UCU    (:), &
+                    ZWAVE_VCU    (:),ZWAVE_HS     (:), &
+                    ZWAVE_TP     (:)                    )
+!
+!
+!*       3.     Put definitions for exchange of coupling fields :
+!               -------------------------------------------------
+!
+!-------------------------------------------------------------------------------
+! Put variable over land tile
+!-------------------------------------------------------------------------------
+!
+IF(GRECV_LAND)THEN
+  CALL PUT_SFX_LAND(YSURF_CUR%IM%I, YSURF_CUR%U,      &
+                    ILUOUT,LCPL_GW,LCPL_FLOOD,        &
+                    ZLAND_WTD   (:),ZLAND_FWTD   (:), &
+                    ZLAND_FFLOOD(:),ZLAND_PIFLOOD(:)  )        
+ENDIF
+!
+!-------------------------------------------------------------------------------
+! Put variable over sea and/or water tile
+!-------------------------------------------------------------------------------
+!
+IF(GRECV_SEA)THEN
+  CALL PUT_SFX_SEA(YSURF_CUR%SM%S, YSURF_CUR%U, YSURF_CUR%WM%W, &
+                   ILUOUT,LCPL_SEAICE,LWATER,                   &
+                   ZSEA_SST   (:),ZSEA_UCU   (:),               &
+                   ZSEA_VCU   (:),ZSEAICE_SIT(:),               &
+                   ZSEAICE_CVR(:),ZSEAICE_ALB(:)                )
+ENDIF
+!
+!-------------------------------------------------------------------------------
+! Put variable over sea and/or water tile for waves
+!-------------------------------------------------------------------------------
+!
+IF(GRECV_WAVE)THEN
+  CALL PUT_SFX_WAVE(YSURF_CUR%SM%S, YSURF_CUR%U,               &
+                    ILUOUT,ZWAVE_CHA(:),ZWAVE_UCU(:),          &
+                    ZWAVE_VCU(:),ZWAVE_HS(:),ZWAVE_TP(:)       )
+ENDIF
+!
+!-------------------------------------------------------------------------------
+! Update radiative properties at time t+1 for radiative scheme
+!-------------------------------------------------------------------------------
+!
+GRECV_FLOOD=(GRECV_LAND.AND.LCPL_FLOOD)
+!
+IF(GRECV_SEA.OR.GRECV_FLOOD)THEN     
+  CALL UPDATE_ESM_SURF_ATM_n(YSURF_CUR%FM%F, YSURF_CUR%IM%I, YSURF_CUR%SM%S, &
+                             YSURF_CUR%U, YSURF_CUR%WM%W, &
+                             HPROGRAM, KI, KSW, PZENITH(:), PSW_BANDS, &
+                             PTSRAD(:), PDIR_ALB(:,:),     &
+                             PSCA_ALB(:,:), PEMIS(:),      &
+                             PTSURF(:)                                       ) 
+ENDIF
+!
+!-------------------------------------------------------------------------------
+!
+END SUBROUTINE MNH_OASIS_RECV
diff --git a/src/ARCH_SRC/CPL_WAVE/MNH/mnh_oasis_send.F90 b/src/ARCH_SRC/CPL_WAVE/MNH/mnh_oasis_send.F90
new file mode 100755
index 0000000000000000000000000000000000000000..7483ea0107c5f778c1717133b3be7248aab8f35e
--- /dev/null
+++ b/src/ARCH_SRC/CPL_WAVE/MNH/mnh_oasis_send.F90
@@ -0,0 +1,263 @@
+!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC for details. version 1.
+!     ##########
+MODULE MODI_MNH_OASIS_SEND
+!     ##########
+!
+INTERFACE 
+!
+      SUBROUTINE MNH_OASIS_SEND(HPROGRAM,KI,PTIMEC,PSTEP_SURF)
+!
+      CHARACTER(LEN=*),      INTENT(IN) :: HPROGRAM
+      INTEGER,               INTENT(IN) :: KI            ! number of points
+      REAL,                  INTENT(IN) :: PTIMEC        ! Cumulated run time step (s)
+      REAL,                  INTENT(IN) :: PSTEP_SURF    ! Model time step (s)
+!
+      END SUBROUTINE MNH_OASIS_SEND
+!
+END INTERFACE
+!
+END MODULE MODI_MNH_OASIS_SEND
+!
+!     ####################################################################
+SUBROUTINE MNH_OASIS_SEND(HPROGRAM,KI,PTIMEC,PSTEP_SURF)
+!     ####################################################################
+!
+!!****  *MNH_OASIS_SEND* 
+!!
+!!    PURPOSE
+!!    -------
+!!    Meso-NH driver to send coupling fields
+!!
+!!**  METHOD
+!!    ------
+!!
+!!    EXTERNAL
+!!    --------
+!!
+!!
+!!    IMPLICIT ARGUMENTS
+!!    ------------------
+!!
+!!    REFERENCE
+!!    ---------
+!!
+!!
+!!    AUTHOR
+!!    ------
+!!	J. Pianezze   *LPO*	
+!!
+!!    MODIFICATIONS
+!!    -------------
+!!      Original    09/2014
+!-------------------------------------------------------------------------------
+!
+!*       0.    DECLARATIONS
+!              ------------
+!
+USE MODD_SURF_PAR,   ONLY : XUNDEF
+!
+USE MODN_SFX_OASIS,  ONLY : XTSTEP_CPL_LAND, &
+                            XTSTEP_CPL_LAKE, &
+                            XTSTEP_CPL_SEA , &
+                            XTSTEP_CPL_WAVE, &
+                            LWATER
+!
+USE MODD_SFX_OASIS,  ONLY : LCPL_LAND,LCPL_GW,       &
+                            LCPL_FLOOD,LCPL_CALVING, &
+                            LCPL_LAKE,               &
+                            LCPL_SEA,LCPL_SEAICE,    &
+                            LCPL_WAVE
+!                           
+USE MODD_MNH_SURFEX_n
+!
+USE MODI_GOTO_SURFEX
+USE MODI_GET_SFX_LAND
+USE MODI_GET_SFX_LAKE
+USE MODI_GET_SFX_SEA
+USE MODI_GET_SFX_WAVE
+!
+USE MODI_GET_LUOUT
+!
+IMPLICIT NONE
+!
+!*       0.1   Declarations of arguments
+!              -------------------------
+!
+CHARACTER(LEN=*),      INTENT(IN) :: HPROGRAM
+INTEGER,               INTENT(IN) :: KI            ! number of points
+REAL,                  INTENT(IN) :: PTIMEC        ! Cumulated run time step (s)
+REAL,                  INTENT(IN) :: PSTEP_SURF    ! Model time step (s)
+!
+!
+!*       0.2   Declarations of local variables
+!              -------------------------------
+!
+REAL, DIMENSION(KI)   :: ZLAND_RUNOFF    ! Cumulated Surface runoff             (kg/m2)
+REAL, DIMENSION(KI)   :: ZLAND_DRAIN     ! Cumulated Deep drainage              (kg/m2)
+REAL, DIMENSION(KI)   :: ZLAND_CALVING   ! Cumulated Calving flux               (kg/m2)
+REAL, DIMENSION(KI)   :: ZLAND_RECHARGE  ! Cumulated Recharge to groundwater    (kg/m2)
+REAL, DIMENSION(KI)   :: ZLAND_WATFLD    ! Cumulated net freshwater rate        (kg/m2)
+!
+REAL, DIMENSION(KI)   :: ZLAKE_EVAP  ! Cumulated Evaporation             (kg/m2)
+REAL, DIMENSION(KI)   :: ZLAKE_RAIN  ! Cumulated Rainfall rate           (kg/m2)
+REAL, DIMENSION(KI)   :: ZLAKE_SNOW  ! Cumulated Snowfall rate           (kg/m2)
+REAL, DIMENSION(KI)   :: ZLAKE_WATF  ! Cumulated net freshwater rate     (kg/m2)
+!
+REAL, DIMENSION(KI)   :: ZSEA_FWSU  ! Cumulated zonal wind stress       (Pa.s)
+REAL, DIMENSION(KI)   :: ZSEA_FWSV  ! Cumulated meridian wind stress    (Pa.s)
+REAL, DIMENSION(KI)   :: ZSEA_HEAT  ! Cumulated Non solar net heat flux (J/m2)
+REAL, DIMENSION(KI)   :: ZSEA_SNET  ! Cumulated Solar net heat flux     (J/m2)
+REAL, DIMENSION(KI)   :: ZSEA_WIND  ! Cumulated 10m wind speed          (m)
+REAL, DIMENSION(KI)   :: ZSEA_FWSM  ! Cumulated wind stress             (Pa.s)
+REAL, DIMENSION(KI)   :: ZSEA_EVAP  ! Cumulated Evaporation             (kg/m2)
+REAL, DIMENSION(KI)   :: ZSEA_RAIN  ! Cumulated Rainfall rate           (kg/m2)
+REAL, DIMENSION(KI)   :: ZSEA_SNOW  ! Cumulated Snowfall rate           (kg/m2)
+REAL, DIMENSION(KI)   :: ZSEA_EVPR  ! Cumulated Evap-Precip rate        (kg/m2)
+REAL, DIMENSION(KI)   :: ZSEA_WATF  ! Cumulated net freshwater rate     (kg/m2)
+REAL, DIMENSION(KI)   :: ZSEA_PRES  ! Cumulated Surface pressure        (Pa.s)
+!
+REAL, DIMENSION(KI)   :: ZSEAICE_HEAT ! Cumulated Sea-ice non solar net heat flux (J/m2)
+REAL, DIMENSION(KI)   :: ZSEAICE_SNET ! Cumulated Sea-ice solar net heat flux     (J/m2)
+REAL, DIMENSION(KI)   :: ZSEAICE_EVAP ! Cumulated Sea-ice sublimation             (kg/m2)
+!
+REAL, DIMENSION(KI)   :: ZWAVE_U10    ! 10m u-wind speed (m/s)
+REAL, DIMENSION(KI)   :: ZWAVE_V10    ! 10m v-wind speed (m/s)
+!
+INTEGER               :: IDATE  ! current coupling time step (s)
+INTEGER               :: ILUOUT
+INTEGER               :: INKPROMA
+!
+LOGICAL               :: GSEND_LAND
+LOGICAL               :: GSEND_LAKE
+LOGICAL               :: GSEND_SEA
+LOGICAL               :: GSEND_WAVE
+!
+REAL(KIND=JPRB) :: ZHOOK_HANDLE
+!
+!-------------------------------------------------------------------------------
+!
+!*       1.     Initialize proc by proc :
+!               -------------------------
+!
+CALL GET_LUOUT(HPROGRAM,ILUOUT)
+!
+IDATE = INT(PTIMEC-PSTEP_SURF)
+!
+GSEND_LAND =(LCPL_LAND .AND. MOD(PTIMEC,XTSTEP_CPL_LAND)==0.0)
+GSEND_LAKE =(LCPL_LAKE .AND. MOD(PTIMEC,XTSTEP_CPL_LAKE)==0.0)
+GSEND_SEA  =(LCPL_SEA  .AND. MOD(PTIMEC,XTSTEP_CPL_SEA) ==0.0)
+GSEND_WAVE =(LCPL_WAVE .AND. MOD(PTIMEC,XTSTEP_CPL_WAVE)==0.0)
+!
+!-------------------------------------------------------------------------------
+!
+IF(GSEND_LAND)THEN
+  ZLAND_RUNOFF  (:) = XUNDEF
+  ZLAND_DRAIN   (:) = XUNDEF
+  ZLAND_CALVING (:) = XUNDEF
+  ZLAND_RECHARGE(:) = XUNDEF
+  ZLAND_WATFLD  (:) = XUNDEF  
+ENDIF
+!
+IF(GSEND_LAKE)THEN
+  ZLAKE_EVAP (:) = XUNDEF
+  ZLAKE_RAIN (:) = XUNDEF
+  ZLAKE_SNOW (:) = XUNDEF
+  ZSEA_WATF  (:) = XUNDEF  
+ENDIF
+!
+IF(GSEND_SEA)THEN
+  ZSEA_FWSU (:) = XUNDEF
+  ZSEA_FWSV (:) = XUNDEF
+  ZSEA_HEAT (:) = XUNDEF
+  ZSEA_SNET (:) = XUNDEF
+  ZSEA_WIND (:) = XUNDEF
+  ZSEA_FWSM (:) = XUNDEF
+  ZSEA_EVAP (:) = XUNDEF
+  ZSEA_RAIN (:) = XUNDEF
+  ZSEA_SNOW (:) = XUNDEF
+  ZSEA_EVPR (:) = XUNDEF
+  ZSEA_WATF (:) = XUNDEF
+  ZSEA_PRES (:) = XUNDEF
+  !
+  ZSEAICE_HEAT (:) = XUNDEF
+  ZSEAICE_SNET (:) = XUNDEF
+  ZSEAICE_EVAP (:) = XUNDEF
+ENDIF
+!
+IF(GSEND_WAVE)THEN
+  ZWAVE_U10 (:) = XUNDEF
+  ZWAVE_V10 (:) = XUNDEF
+ENDIF
+!
+!-------------------------------------------------------------------------------
+!
+!*       2.     get local fields :
+!               ------------------
+!
+IF(GSEND_LAND)THEN
+!
+! * Get river output fields
+!
+  CALL GET_SFX_LAND(YSURF_CUR%IM%I,YSURF_CUR%U,         &
+                    LCPL_GW,LCPL_FLOOD,LCPL_CALVING,    &
+                    ZLAND_RUNOFF (:),ZLAND_DRAIN   (:), &
+                    ZLAND_CALVING(:),ZLAND_RECHARGE(:), &
+                    ZLAND_WATFLD (:)                    )
+!
+ENDIF
+!
+IF(GSEND_LAKE)THEN
+!
+! * Get output fields
+!
+  CALL GET_SFX_LAKE(YSURF_CUR%FM%F,YSURF_CUR%U,  &
+                    ZLAKE_EVAP(:),ZLAKE_RAIN(:), &
+                    ZLAKE_SNOW(:),ZLAKE_WATF(:)   )
+!
+ENDIF
+!
+IF(GSEND_SEA)THEN
+!
+! * Get sea output fields
+!
+  CALL GET_SFX_SEA(YSURF_CUR%SM%S, YSURF_CUR%U, YSURF_CUR%WM%W,     &
+                    LCPL_SEAICE, LWATER,                            &
+                    ZSEA_FWSU   (:),ZSEA_FWSV   (:),ZSEA_HEAT   (:),&
+                    ZSEA_SNET   (:),ZSEA_WIND   (:),ZSEA_FWSM   (:),&
+                    ZSEA_EVAP   (:),ZSEA_RAIN   (:),ZSEA_SNOW   (:),&
+                    ZSEA_EVPR   (:),ZSEA_WATF   (:),ZSEA_PRES   (:),&
+                    ZSEAICE_HEAT(:),ZSEAICE_SNET(:),ZSEAICE_EVAP(:) )
+!
+ENDIF
+!
+IF(GSEND_WAVE)THEN
+!
+! * Get wave output fields
+!
+  CALL GET_SFX_WAVE(YSURF_CUR%U,  YSURF_CUR%SM%DGS, &
+                    ZWAVE_U10(:), ZWAVE_V10(:)      )
+!
+ENDIF
+!
+!    
+!-------------------------------------------------------------------------------
+!
+!*       3.     Send fields to OASIS proc by proc:
+!               ----------------------------------
+!
+CALL SFX_OASIS_SEND(ILUOUT,KI,IDATE,GSEND_LAND,GSEND_LAKE,GSEND_SEA,GSEND_WAVE, &
+                    ZLAND_RUNOFF,ZLAND_DRAIN,ZLAND_CALVING,ZLAND_RECHARGE,      &
+                    ZLAND_WATFLD,                                               &
+                    ZLAKE_EVAP,ZLAKE_RAIN,ZLAKE_SNOW,ZLAKE_WATF,                &
+                    ZSEA_FWSU,ZSEA_FWSV,ZSEA_HEAT,ZSEA_SNET,ZSEA_WIND,          &
+                    ZSEA_FWSM,ZSEA_EVAP,ZSEA_RAIN,ZSEA_SNOW,                    &
+                    ZSEA_EVPR,ZSEA_WATF,                                        &
+                    ZSEA_PRES,ZSEAICE_HEAT,ZSEAICE_SNET,ZSEAICE_EVAP,           &
+                    ZWAVE_U10, ZWAVE_V10      )
+!
+!-------------------------------------------------------------------------------
+!
+END SUBROUTINE MNH_OASIS_SEND
diff --git a/src/ARCH_SRC/CPL_WAVE/SURCOUCHE/mode_init_ll.f90 b/src/ARCH_SRC/CPL_WAVE/SURCOUCHE/mode_init_ll.f90
new file mode 100644
index 0000000000000000000000000000000000000000..a06b15757c13235756f943d27b73d1166c8d7f10
--- /dev/null
+++ b/src/ARCH_SRC/CPL_WAVE/SURCOUCHE/mode_init_ll.f90
@@ -0,0 +1,822 @@
+!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC for details. version 1.
+!-----------------------------------------------------------------
+!--------------- special set of characters for CVS information
+!-----------------------------------------------------------------
+! $Source$
+! $Name$ 
+! $Revision$ 
+! $Date$
+!-----------------------------------------------------------------
+!-----------------------------------------------------------------
+
+#ifdef MNH_MPI_DOUBLE_PRECISION
+#define MNH_MPI_REAL MPI_DOUBLE_PRECISION
+#define MNH_MPI_2REAL MPI_2DOUBLE_PRECISION
+#else
+#define MNH_MPI_REAL MPI_REAL
+#define MNH_MPI_2REAL MPI_2REAL
+#endif
+
+!     ###################
+      MODULE MODE_INIT_ll
+!     ###################
+!!
+!!    Purpose
+!!    -------
+!
+!     The purpose of this module is the implementation of the initialisation
+!     of parallel data structure
+!
+!!    Routines Of The User Interface
+!!    ------------------------------
+! 
+!     SUBROUTINES : SET_SPLITTING_ll, SET_LBX_ll, SET_LBY_ll
+!                   SET_DIM_ll, SET_JP_ll, SET_XRATIO_ll, SET_YRATIO_ll
+!                   SET_DAD_ll, SET_XOR_ll, SET_XEND_ll, SET_YOR_ll,
+!                   SET_YEND_ll, SET_DAD0_ll,
+! 
+!                   INI_PARA_ll, END_PARA_ll
+!                   
+!!    Implicit Arguments
+!!    ------------------
+! 
+!!    Reference
+!!    ---------
+! 
+!      User Interface for Meso-NH parallel package
+!      Ph. Kloos, L. Giraud, R. Guivarch, D. Lugato
+!
+!!    Authors
+!!    -------
+! 
+!     R. Guivarch               * CERFACS - ENSEEIHT *
+!     Ph. Kloos                 * CERFACS - CNRM *
+!     N. Gicquel                * CERFACS - CNRM *
+!
+!!    Modifications
+!!    -------------
+!
+!       Original     May 19, 1998
+!       Juan     19/08/2005: distinction Halo NORD/SUD & EST/WEST
+!       M.Moge   05/02/2015: extended HALO (halo size + 1)
+!
+!-------------------------------------------------------------------------------
+!
+  USE MODD_MPIF
+!
+  IMPLICIT NONE
+!
+!  INCLUDE 'mpif.h'
+!
+  CONTAINS
+!
+!     #######################################
+      SUBROUTINE SET_SPLITTING_ll(HSPLITTING)
+!     #######################################
+!
+!!****  *SET_SPLITTING_ll* - 
+!
+!!    Purpose
+!!    -------
+!       Set the variable YSPLITTING with HSPLITTING
+!
+!-------------------------------------------------------------------------------
+!
+  USE MODD_VAR_ll, ONLY : YSPLITTING
+!
+  IMPLICIT NONE
+!
+  CHARACTER(LEN=*) :: HSPLITTING
+!
+!-------------------------------------------------------------------------------
+!
+  YSPLITTING = HSPLITTING
+!
+!-------------------------------------------------------------------------------
+!
+      END SUBROUTINE SET_SPLITTING_ll
+!
+!     ################################
+      SUBROUTINE SET_LBX_ll(KLBX, KMI)
+!     ################################
+!
+!!****  *SET_LBX_ll *-
+!
+!!    Purpose
+!!    -------
+!       Set the variable CLBCX(KMI,:) with KLBX
+!
+!-------------------------------------------------------------------------------
+!
+  USE MODD_PARAMETERS_ll, ONLY : JPMODELMAX
+  USE MODD_DIM_ll, ONLY : CLBCX
+!
+  IMPLICIT NONE
+!
+  CHARACTER(LEN=*) :: KLBX
+  INTEGER :: KMI
+!
+!-------------------------------------------------------------------------------
+!
+  IF (KMI.LE.JPMODELMAX) THEN
+    CLBCX(KMI, :) = KLBX
+  ENDIF
+!
+!-------------------------------------------------------------------------------
+!
+      END SUBROUTINE SET_LBX_ll
+!
+!     ################################
+      SUBROUTINE SET_LBY_ll(KLBY, KMI)
+!     ################################
+!
+!!****  *SET_LBY_ll *-
+!
+!!    Purpose
+!!    -------
+!       Set the variable CLBCY(KMI,:) with KLBY
+!
+!-------------------------------------------------------------------------------
+!
+  USE MODD_PARAMETERS_ll, ONLY : JPMODELMAX
+  USE MODD_DIM_ll, ONLY : CLBCY
+!
+  IMPLICIT NONE
+!
+  CHARACTER(LEN=*) :: KLBY
+  INTEGER :: KMI
+!
+!-------------------------------------------------------------------------------
+!
+  IF (KMI.LE.JPMODELMAX) THEN
+    CLBCY(KMI, :) = KLBY
+  ENDIF
+!
+!-------------------------------------------------------------------------------
+!
+      END SUBROUTINE SET_LBY_ll
+!
+!     #################################
+      SUBROUTINE SET_DIM_ll(KX, KY, KZ)
+!     #################################
+!
+!!****  *SET_DIM_ll *-
+!
+!!    Purpose
+!!    -------
+!       Set the variable CLBCY(KMI,:) with KLBY
+!
+!-------------------------------------------------------------------------------
+!
+  USE MODD_DIM_ll, ONLY : NIMAX_ll, NJMAX_ll, NKMAX_ll
+!
+  IMPLICIT NONE
+!
+  INTEGER :: KX,KY,KZ
+!
+!-------------------------------------------------------------------------------
+!
+  NIMAX_ll = KX
+  NJMAX_ll = KY
+  NKMAX_ll = KZ
+!
+!-------------------------------------------------------------------------------
+!
+      END SUBROUTINE SET_DIM_ll
+!
+!     #####################################################
+      SUBROUTINE SET_JP_ll(KMODELMAX, KHEXT, KVEXT, KPHALO)
+!     #####################################################
+!
+!!****  *SET_JP_ll *-
+!
+!!    Purpose
+!!    -------
+!       Set the halo variables and alloacte arrays of MODD_DIM_ll
+!
+!-------------------------------------------------------------------------------
+!
+  USE MODD_PARAMETERS_ll, ONLY : JPMODELMAX, JPHEXT, JPVEXT
+  USE MODD_DIM_ll, ONLY : NDXRATIO_ALL, NDYRATIO_ALL, &
+                          NXOR_ALL, NYOR_ALL, NXEND_ALL, NYEND_ALL, &
+                          NDAD, CLBCX, CLBCY
+  USE MODD_VAR_ll, ONLY : JPHALO
+!
+  IMPLICIT NONE
+!
+  INTEGER :: KMODELMAX, KHEXT, KVEXT, KPHALO
+!
+!-------------------------------------------------------------------------------
+!
+  JPMODELMAX = KMODELMAX
+  JPHEXT = KHEXT
+  JPVEXT = KVEXT 
+  JPHALO = KPHALO
+!
+! Allocate arrays declared in MODD_DIM_ll
+!
+  IF ( ALLOCATED(NDXRATIO_ALL) ) DEALLOCATE(NDXRATIO_ALL)
+  IF ( ALLOCATED(NDYRATIO_ALL) ) DEALLOCATE(NDYRATIO_ALL)
+  IF ( ALLOCATED(NXOR_ALL) ) DEALLOCATE(NXOR_ALL)
+  IF ( ALLOCATED(NYOR_ALL) ) DEALLOCATE(NYOR_ALL)
+  IF ( ALLOCATED(NXEND_ALL) ) DEALLOCATE(NXEND_ALL)
+  IF ( ALLOCATED(NYEND_ALL) ) DEALLOCATE(NYEND_ALL)
+  IF ( ALLOCATED(NDAD) ) DEALLOCATE(NDAD)
+  IF ( ALLOCATED(CLBCX) ) DEALLOCATE(CLBCX)
+  IF ( ALLOCATED(CLBCY) ) DEALLOCATE(CLBCY)
+  ALLOCATE(NDXRATIO_ALL(JPMODELMAX), NDYRATIO_ALL(JPMODELMAX))
+  ALLOCATE(NXOR_ALL(JPMODELMAX), NYOR_ALL(JPMODELMAX)) 
+  ALLOCATE(NXEND_ALL(JPMODELMAX), NYEND_ALL(JPMODELMAX)) 
+  ALLOCATE(NDAD(JPMODELMAX)) 
+  ALLOCATE(CLBCX(JPMODELMAX, 2), CLBCY(JPMODELMAX, 2)) 
+!
+!-------------------------------------------------------------------------------
+!
+      END SUBROUTINE SET_JP_ll
+!
+!     ######################################
+      SUBROUTINE SET_XRATIO_ll(KXRATIO, KMI)
+!     ######################################
+!
+!!****  *SET_XRATIO_ll *-
+!
+!!    Purpose
+!!    -------
+!       Set the variable NDXRATIO_ALL(KMI) with KXRATIO
+!
+!-------------------------------------------------------------------------------
+!
+  USE MODD_DIM_ll, ONLY : NDXRATIO_ALL
+!
+  IMPLICIT NONE
+!
+  INTEGER :: KXRATIO, KMI
+!
+!-------------------------------------------------------------------------------
+!
+  NDXRATIO_ALL(KMI) = KXRATIO
+!
+!-------------------------------------------------------------------------------
+!
+      END SUBROUTINE SET_XRATIO_ll
+!
+!     ######################################
+      SUBROUTINE SET_YRATIO_ll(KYRATIO, KMI)
+!     ######################################
+!
+!!****  *SET_YRATIO_ll *-
+!
+!!    Purpose
+!!    -------
+!       Set the variable NDYRATIO_ALL(KMI) with KYRATIO
+!
+!-------------------------------------------------------------------------------
+!
+  USE MODD_DIM_ll, ONLY : NDYRATIO_ALL
+!
+  IMPLICIT NONE
+!
+  INTEGER :: KYRATIO, KMI
+!
+!-------------------------------------------------------------------------------
+!
+  NDYRATIO_ALL(KMI) = KYRATIO
+!
+!-------------------------------------------------------------------------------
+!
+      END SUBROUTINE SET_YRATIO_ll
+!
+!     ################################
+      SUBROUTINE SET_DAD_ll(KDAD, KMI)
+!     ################################
+!
+!!****  *SET_DAD_ll* -
+!
+!!    Purpose
+!!    -------
+!       Set the variable NDAD(KMI) with KDAD
+!
+!-------------------------------------------------------------------------------
+!
+  USE MODD_DIM_ll, ONLY : NDAD
+!
+  IMPLICIT NONE
+!
+  INTEGER :: KDAD, KMI
+!
+!-------------------------------------------------------------------------------
+!
+  NDAD(KMI) = KDAD
+!
+!-------------------------------------------------------------------------------
+!
+      END SUBROUTINE SET_DAD_ll
+!
+!     ################################
+      SUBROUTINE SET_XOR_ll(KXOR, KMI)
+!     ################################
+!
+!!****  *SET_XOR_ll* -
+!
+!!    Purpose
+!!    -------
+!       Set the variable NXOR_ALL(KMI) with KXOR
+!
+!-------------------------------------------------------------------------------
+!
+  USE MODD_DIM_ll, ONLY : NXOR_ALL
+!
+  IMPLICIT NONE
+!
+  INTEGER :: KXOR, KMI
+!
+!-------------------------------------------------------------------------------
+!
+  NXOR_ALL(KMI) = KXOR
+!
+!-------------------------------------------------------------------------------
+!
+      END SUBROUTINE SET_XOR_ll
+!
+!     ##################################
+      SUBROUTINE SET_XEND_ll(KXEND, KMI)
+!     ##################################
+!
+!!****  *SET_XEND_ll* -
+!
+!!    Purpose
+!!    -------
+!       Set the variable NXEND_ALL(KMI) with KXEND
+!
+!-------------------------------------------------------------------------------
+!
+  USE MODD_DIM_ll, ONLY : NXEND_ALL
+!
+  IMPLICIT NONE
+!
+  INTEGER :: KXEND, KMI
+!
+!-------------------------------------------------------------------------------
+!
+  NXEND_ALL(KMI) = KXEND
+!
+!-------------------------------------------------------------------------------
+!
+      END SUBROUTINE SET_XEND_ll
+!
+!     ################################
+      SUBROUTINE SET_YOR_ll(KYOR, KMI)
+!     ################################
+!
+!!****  *SET_YOR_ll* -
+!
+!!    Purpose
+!!    -------
+!       Set the variable NYOR_ALL(KMI) with KYOR
+!
+!-------------------------------------------------------------------------------
+!
+  USE MODD_DIM_ll, ONLY : NYOR_ALL
+!
+  IMPLICIT NONE
+!
+  INTEGER :: KYOR, KMI
+!
+!-------------------------------------------------------------------------------
+!
+  NYOR_ALL(KMI) = KYOR
+!
+!-------------------------------------------------------------------------------
+!
+      END SUBROUTINE SET_YOR_ll
+!
+!     ##################################
+      SUBROUTINE SET_YEND_ll(KYEND, KMI)
+!     ##################################
+!
+!!****  *SET_YEND_ll* -
+!
+!!    Purpose
+!!    -------
+!       Set the variable NYEND_ALL(KMI) with KYEND
+!
+!-------------------------------------------------------------------------------
+!
+  USE MODD_DIM_ll, ONLY : NYEND_ALL
+!
+  IMPLICIT NONE
+!
+  INTEGER :: KYEND, KMI
+!
+!-------------------------------------------------------------------------------
+!
+  NYEND_ALL(KMI) = KYEND
+!
+!-------------------------------------------------------------------------------
+!
+      END SUBROUTINE SET_YEND_ll
+!
+!     ########################
+      SUBROUTINE SET_DAD0_ll()
+!     ########################
+!
+!!****  *SET_DAD0_ll* -
+!
+!!    Purpose
+!!    -------
+!       fill the array NDAD with 0
+!
+!-------------------------------------------------------------------------------
+!
+  USE MODD_DIM_ll, ONLY : NDAD
+!
+  IMPLICIT NONE
+!
+!-------------------------------------------------------------------------------
+!
+  NDAD(:) = 0
+!
+      END SUBROUTINE SET_DAD0_ll
+!
+!     ################################
+      SUBROUTINE INI_PARA_ll(KINFO_ll)
+        !     ################################
+        !
+        !!****  *INI_PARA_ll* - routine to initialize the parallel variables
+        !!
+        !!    Purpose
+        !!    -------
+        !     the purpose of the routine is to fill the structured type variables
+        !     TCRRT_PROCONF and TCRRT_COMDATA
+        !
+        !!**  Method
+        !!    ------
+        !!
+        !!    External
+        !!    --------
+        !     Module MODE_SPLITTING_ll
+        !      SPLIT2
+        !
+        !     Module MODE_CONSTRUCT_ll
+        !       INI_PZ, INI_EZ, INI_BOUNDARIES, INI_TRANS,
+        !       CONSTRUCT_HALO1, CONSTRUCT_HALO2, CONSTRUCT_HALO2_EXTENDED,
+        !       CONSTRUCT_TRANS, CONSTRUCT_1DX, CONSTRUCT_1DY,
+        !       COMPUTE_HALO_MAX, COMPUTE_TRANS_MAX
+        !
+        !     Module MODE_NEST_ll
+        !       INI_CHILD
+        !
+        !!    Implicit Arguments
+        !!    ------------------
+        !     Module MODD_DIM_ll
+        !       JPHEXT - Horizontal External points number
+        !       NDXRATIO_ALL, NDYRATIO_ALL, NXOR_ALL, NYOR_ALL,
+        !       NXEND_ALL, NYEND_ALL,...
+        ! 
+        !     Module MODD_PARALLEL
+        !       TCRRT_PROCONF - Current configuration for current model
+        !       TCRRT_COMDATA - Current communication data structure for current model
+        !                       and local processor
+        ! 
+        !     Reference
+        !!    ---------
+        ! 
+        !!    AUTHOR
+        !!    ------
+        !       R. Guivarch
+        ! 
+        !!    MODIFICATIONS
+        !!    -------------
+        !     Original 01/05/98
+        !     R. Guivarch 01/01/98  Grid-Nesting
+        !     R. Guivarch 29/11/99  x and y splitting -> YSPLITTING 
+        !
+        !-------------------------------------------------------------------------------
+        !
+        !*       0.    DECLARATIONS
+        !
+        USE MODD_DIM_ll
+        USE MODD_PARAMETERS_ll
+        USE MODD_STRUCTURE_ll
+        USE MODD_VAR_ll
+        !
+        USE MODE_SPLITTING_ll, ONLY : SPLIT2
+        !
+        USE MODE_CONSTRUCT_ll, ONLY : INI_PZ, INI_EZ, INI_BOUNDARIES, INI_TRANS, &
+             CONSTRUCT_HALO1, CONSTRUCT_HALO2, CONSTRUCT_HALO_EXTENDED, &
+             CONSTRUCT_TRANS, CONSTRUCT_1DX, CONSTRUCT_1DY, &
+             COMPUTE_HALO_MAX, COMPUTE_TRANS_MAX
+        !
+        USE MODE_NEST_ll, ONLY : INI_CHILD
+        !
+        !JUANZ
+        USE  MODE_MNH_WORLD , ONLY :  INIT_NMNH_COMM_WORLD
+        !JUANZ
+        IMPLICIT NONE
+        !
+        !*       0.1   declarations of arguments
+        !
+        INTEGER, INTENT(OUT) :: KINFO_ll
+        !
+        !*       0.2   declarations of local variables
+        !
+
+        INTEGER  ,PARAMETER                      :: MPI_BUFFER_SIZE = 140000000
+        CHARACTER,SAVE,ALLOCATABLE,DIMENSION(:)  :: MPI_BUFFER
+        !JUAN
+        LOGICAL,SAVE                             :: GFIRSTCALL = .TRUE.
+        !JUAN
+
+
+        TYPE(ZONE_ll), ALLOCATABLE, DIMENSION(:) :: TZDZP ! intermediate zone
+        !
+        TYPE(MODELSPLITTING_ll), POINTER :: TZSPLIT
+        TYPE(PROCONF_ll), POINTER :: TZPROCONF
+        INTEGER :: JMODEL
+
+        LOGICAL     :: GISINIT
+        !JUANZ
+        INTEGER :: myrank_key,new_rank,new_size
+        INTEGER  :: COLOR = 1
+        !JUANZ
+        !
+        !-------------------------------------------------------------------------------
+        !
+        !*       1.    INITIALIZE MPI :
+        !              --------------
+        !
+        KINFO_ll = 0
+        CALL MPI_INITIALIZED(GISINIT, KINFO_ll)
+        IF (.NOT. GISINIT) THEN
+           !CALL MPI_INIT(KINFO_ll)
+           !JUANZ create new/remapped communicator if need
+           CALL INIT_NMNH_COMM_WORLD(KINFO_ll)
+        END IF
+        !
+        CALL MPI_COMM_RANK(NMNH_COMM_WORLD, IP, KINFO_ll)
+        !
+        CALL MPI_COMM_SIZE(NMNH_COMM_WORLD, NPROC, KINFO_ll)
+        !
+        CALL MPI_COMM_DUP(NMNH_COMM_WORLD, NHALO_COM, KINFO_ll)
+        !
+        CALL MPI_COMM_DUP(NMNH_COMM_WORLD, NHALO2_COM, KINFO_ll)
+        !
+        CALL MPI_COMM_DUP(NMNH_COMM_WORLD, NTRANS_COM, KINFO_ll)
+        !
+        CALL MPI_COMM_DUP(NMNH_COMM_WORLD, NGRID_COM, KINFO_ll)
+        !
+        IP = IP + 1
+        !
+        MPI_PRECISION  = MNH_MPI_REAL
+        MPI_2PRECISION = MNH_MPI_2REAL
+        !
+        !-------------------------------------------------------------------------------
+        !
+        !*       2.    SET OUTPUT FILE :
+        !              ---------------
+
+        !  CALL OPEN_ll(UNIT=NIOUNIT,FILE=YOUTPUTFILE,ACTION='write',form&
+        !       &='FORMATTED',MODE=SPECIFIC,IOSTAT=IRESP)
+        !
+        !-------------------------------------------------------------------------------
+        !
+        !*       3.    ALLOCATION :
+        !              ----------
+        !
+
+        IF (GFIRSTCALL) THEN
+           ALLOCATE(MPI_BUFFER(MPI_BUFFER_SIZE))
+           CALL MPI_BUFFER_ATTACH(MPI_BUFFER,MPI_BUFFER_SIZE,KINFO_ll)
+           GFIRSTCALL = .FALSE.
+        ENDIF
+
+
+        ALLOCATE(TZDZP(NPROC))
+        !
+        ALLOCATE(TCRRT_PROCONF)
+        CALL ALLOC(TCRRT_COMDATA)
+        ALLOCATE(TCRRT_PROCONF%TSPLITS_B(NPROC))
+        ALLOCATE(TCRRT_PROCONF%TSPLITS_X(NPROC))
+        ALLOCATE(TCRRT_PROCONF%TSPLITS_Y(NPROC))
+        ALLOCATE(TCRRT_PROCONF%TBOUND(NPROC))
+        NULLIFY(TCRRT_PROCONF%TPARENT)
+        NULLIFY(TCRRT_COMDATA%TPARENT)
+        NULLIFY(TCRRT_PROCONF%TCHILDREN)
+        NULLIFY(TCRRT_COMDATA%TCHILDREN)
+        !
+        !-------------------------------------------------------------------------------
+        !
+        !*       4.    SPLITTING OF THE DOMAIN :
+        !              -----------------------
+        !
+        DIMX = NIMAX_ll + 2*JPHEXT
+        DIMY = NJMAX_ll + 2*JPHEXT
+        DIMZ = NKMAX_ll + 2*JPVEXT
+        !
+        TCRRT_PROCONF%NUMBER = 1
+        !
+        CALL SPLIT2(NIMAX_ll,NJMAX_ll,NKMAX_ll,NPROC,TZDZP,YSPLITTING)
+        !    
+        !-------------------------------------------------------------------------------
+        !
+        !*       5.    INITIALIZATION OF TCRRT_PROCONF :
+        !              -------------------------------
+        !
+        CALL INI_PZ(TCRRT_PROCONF,TZDZP)
+        !
+        CALL INI_BOUNDARIES(TCRRT_PROCONF)
+        !
+        CALL INI_EZ(TCRRT_PROCONF)
+        !
+        CALL INI_TRANS(TCRRT_PROCONF)
+        !
+        !-------------------------------------------------------------------------------
+        !
+        !*       6.    INITIALIZATION OF TCRRT_COMDATA :
+        !              -------------------------------
+        !
+        !*       6.1    Model Number
+        !
+        TCRRT_COMDATA%NUMBER = 1
+        !
+        !*       6.2    Pointer from TCRRT_COMDATA to TCRRT_PROCONF for 2Way splitting
+        !
+        TCRRT_COMDATA%TSPLIT_B => TCRRT_PROCONF%TSPLITS_B(IP)
+
+        TZSPLIT => TCRRT_COMDATA%TSPLIT_B
+        !
+        !
+        !*       6.3   Pointer from TCRRT_COMDATA to TCRRT_PROCONF
+        !        for x-slices splitting
+        TCRRT_COMDATA%TSPLIT_X => TCRRT_PROCONF%TSPLITS_X(IP)
+        !
+        TZSPLIT => TCRRT_COMDATA%TSPLIT_X
+        !
+        !
+        !*       6.4   Pointer from TCRRT_COMDATA to TCRRT_PROCONF
+        !              for y-slices splitting
+        !
+        TCRRT_COMDATA%TSPLIT_Y => TCRRT_PROCONF%TSPLITS_Y(IP)
+        !
+        TZSPLIT => TCRRT_COMDATA%TSPLIT_Y
+        !
+        !
+        !*       6.5   Construction of HALO1 communication data
+        !
+        CALL CONSTRUCT_HALO1(TCRRT_COMDATA, TCRRT_PROCONF)
+        CALL CONSTRUCT_HALO2(TCRRT_COMDATA, TCRRT_PROCONF)
+        CALL CONSTRUCT_HALO_EXTENDED(TCRRT_COMDATA, TCRRT_PROCONF, JPHEXT+1)
+        !
+        !
+        !*       6.6   Construction of 1D communication data
+        !
+        ALLOCATE(TCRRT_COMDATA%HALO1DX)
+        ALLOCATE(TCRRT_COMDATA%HALO1DX%NSEND_WEST(NPROC))
+        ALLOCATE(TCRRT_COMDATA%HALO1DX%NSEND_EAST(NPROC))
+        CALL CONSTRUCT_1DX(TCRRT_COMDATA, TCRRT_PROCONF)
+        !
+        ALLOCATE(TCRRT_COMDATA%HALO1DY)
+        ALLOCATE(TCRRT_COMDATA%HALO1DY%NSEND_SOUTH(NPROC))
+        ALLOCATE(TCRRT_COMDATA%HALO1DY%NSEND_NORTH(NPROC))
+        CALL CONSTRUCT_1DY(TCRRT_COMDATA, TCRRT_PROCONF)
+        !
+        !
+        !*       6.7   Construction of Transposition communication data
+        !
+        CALL CONSTRUCT_TRANS(TCRRT_COMDATA, TCRRT_PROCONF)
+        !
+        !
+        !-------------------------------------------------------------------------------
+        !
+        !        7.    GRID NESTING :
+        !              ------------
+        !
+        NULLIFY(TCRRT_PROCONF%TCHILDREN)
+        NULLIFY(TCRRT_COMDATA%TCHILDREN)
+        NULLIFY(TCRRT_COMDATA%TP2C_DATA)
+        !
+        DO JMODEL = 1, JPMODELMAX
+           !
+           IF( NDAD(JMODEL) .EQ. TCRRT_PROCONF%NUMBER ) THEN
+              CALL INI_CHILD(TCRRT_PROCONF, TCRRT_COMDATA, JMODEL)
+           ENDIF
+           !
+        ENDDO
+        !
+        !-------------------------------------------------------------------------------
+        !
+        TZPROCONF => TCRRT_PROCONF
+        !
+        CALL COMPUTE_TRANS_MAX(NBUFFERSIZE_3D, TCRRT_COMDATA)
+        NCOMBUFFSIZE1 = NBUFFERSIZE_3D
+        !JUAN NCOMBUFFSIZE1 = 10000000
+
+        !
+        CALL COMPUTE_HALO_MAX(NMAXSIZEHALO, TCRRT_COMDATA)
+        !
+        !NAG4.0 boom avec le 50 lorsqu'on active les scalaires 
+        !  NBUFFERSIZE_2D = 50*NMAXSIZEHALO
+        NBUFFERSIZE_2D = 150*NMAXSIZEHALO
+        !NAG4.0
+        NCOMBUFFSIZE2 = NBUFFERSIZE_2D
+        !
+        DEALLOCATE(TZDZP)
+        !
+        !-------------------------------------------------------------------------------
+        !
+      END SUBROUTINE INI_PARA_ll
+!
+!     ##################################
+      SUBROUTINE END_PARA_ll( KINFO_ll )
+!     ##################################
+!
+!!****  *END_PARA_ll* - routine to finalize the parallel session
+!
+!!    Purpose
+!!    -------
+!     the purpose of the routine is to end the parallel session
+!
+!!**  Method
+!!    ------
+!
+!!    External
+!!    --------
+!
+!!    Implicit Arguments
+!!    ------------------
+!     Module MODD_DIM_ll
+!       
+!!    Reference
+!!    ---------
+!
+!!    Author
+!!    ------
+!     R. Guivarch
+!
+!!    Modifications
+!!    -------------
+!     Original 01/06/98
+!     R. Guivarch 15/09/99  deallocation of grid-nesting arrays
+!     J. Pianezze 01/11/2014 - add CPLOASIS cpp key
+!
+!-------------------------------------------------------------------------------
+!
+!*       0.    DECLARATIONS
+!
+  USE MODD_DIM_ll
+!  USE MODD_STRUCTURE_ll
+!  USE MODD_VAR_ll, ONLY : NIOUNIT, YOUTPUTFILE
+  USE MODD_IO_ll,          ONLY : ISP
+!
+#ifdef MNH_GA
+USE MODE_GA
+#endif
+!
+  IMPLICIT NONE
+!
+!*       0.1   declarations of arguments
+!
+  INTEGER, INTENT(OUT) :: KINFO_ll
+
+!
+!*       0.2   declarations of local variables
+!
+!-------------------------------------------------------------------------------
+!
+!*       1.    CALL TO MPI_FINALIZE
+!
+!  CALL CLOSE_ll(YOUTPUTFILE)
+
+#ifdef MNH_GA
+  if (.not. GFIRST_GA ) then
+     call ga_sync()
+     IF (ISP .EQ. 1) THEN
+        call ga_print_stats()
+        call ga_summarize(0)
+     END IF
+     call ga_sync()
+     gstatus_ga =  ga_destroy(g_a)
+     CALL ga_terminate()
+  endif
+#endif
+!
+#ifndef CPLOASIS
+  CALL MPI_FINALIZE(KINFO_ll)
+#endif
+!
+!-------------------------------------------------------------------------------
+!
+!*       2.    DEALLOCATION
+!
+  DEALLOCATE(NDXRATIO_ALL, NDYRATIO_ALL)
+  DEALLOCATE(NXOR_ALL, NYOR_ALL) 
+  DEALLOCATE(NXEND_ALL, NYEND_ALL) 
+  DEALLOCATE(NDAD) 
+  DEALLOCATE(CLBCX, CLBCY) 
+!
+END SUBROUTINE END_PARA_ll
+!
+END MODULE MODE_INIT_ll
diff --git a/src/ARCH_SRC/CPL_WAVE/SURCOUCHE/mode_io.f90 b/src/ARCH_SRC/CPL_WAVE/SURCOUCHE/mode_io.f90
new file mode 100644
index 0000000000000000000000000000000000000000..e56a4b5758803654ffaa72008ecd19ae0cc820d0
--- /dev/null
+++ b/src/ARCH_SRC/CPL_WAVE/SURCOUCHE/mode_io.f90
@@ -0,0 +1,954 @@
+!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC for details. version 1.
+!-----------------------------------------------------------------
+!--------------- special set of characters for CVS information
+!-----------------------------------------------------------------
+! $Source$
+! $Name$ 
+! $Revision$ 
+! $Date$
+!-----------------------------------------------------------------
+!-----------------------------------------------------------------
+!!    Authors
+!!    -------
+!
+!     D. Gazen
+!     Juan 19/08/2005: bug argument optinonel ACCESS --> YACCESS 
+!     Juan 22/05/2008: bug mode SPECIFIC in OPEN_ll 
+!     Juan 05/11/2009: allow JPMAX_UNIT=48 open files 
+!     J.Escobar   18/10/10   bug with PGI compiler on ADJUSTL
+!     Philippe 04/02/2016: bug with DELIM='NONE' and GCC 5.2/5.3
+!     D.Gazen   : avril 2016 change error message 
+!     J. Pianezze 01/08/2016  add CPLOASIS cpp key
+!
+MODULE MODE_IO_ll
+
+  USE MODD_ERRCODES
+  USE MODE_FD_ll
+  USE MODD_MPIF
+  !JUANZ
+  USE MODD_VAR_ll, ONLY : NMNH_COMM_WORLD
+  !JUANZ
+
+  IMPLICIT NONE 
+
+  PRIVATE
+
+  !INCLUDE 'mpif.h'
+
+  INTEGER, PARAMETER :: JPFNULL = 9       !! /dev/null fortran unit
+  INTEGER, PARAMETER :: JPRESERVED_UNIT   = 11
+  INTEGER, PARAMETER :: JPMAX_UNIT_NUMBER = JPRESERVED_UNIT+300
+  ! 
+  LOGICAL,SAVE :: GALLOC(JPRESERVED_UNIT:JPMAX_UNIT_NUMBER) = .FALSE.
+  !
+  CHARACTER(LEN=*),PARAMETER      :: CFILENULL="/dev/null"
+  !
+  !! Provisoire
+  CHARACTER(LEN=*),PARAMETER :: GLOBAL='GLOBAL'
+  CHARACTER(LEN=*),PARAMETER :: SPECIFIC='SPECIFIC'
+  !!
+  LOGICAL,SAVE :: GCONFIO = .FALSE. ! Turn TRUE when SET_CONFIO_ll is called.
+
+  !! Provisoire
+  PUBLIC IONEWFLU,UPCASE,INITIO_ll,OPEN_ll,CLOSE_ll,FLUSH_ll,GLOBAL,SPECIFIC
+  PUBLIC SET_CONFIO_ll,GCONFIO
+  !JUANZ
+  PUBLIC  io_file,io_rank
+  !JUANZ
+
+CONTAINS 
+
+  FUNCTION IONEWFLU()
+
+    INTEGER :: IONEWFLU
+
+    INTEGER :: JI
+    INTEGER :: IOS
+    LOGICAL :: GEXISTS, GOPENED, GFOUND
+
+    GFOUND = .FALSE.
+
+    DO JI=JPRESERVED_UNIT, JPMAX_UNIT_NUMBER
+       IF (GALLOC(JI)) CYCLE
+       INQUIRE(UNIT=JI, EXIST=GEXISTS, OPENED=GOPENED, IOSTAT=IOS)
+       IF (GEXISTS .AND. .NOT. GOPENED .AND. IOS == 0) THEN
+          IONEWFLU   = JI
+          GFOUND     = .TRUE.
+          GALLOC(JI) = .TRUE.
+          EXIT
+       END IF
+    END DO
+
+    IF (.NOT. GFOUND) IONEWFLU = NOSLOTLEFT
+
+  END FUNCTION IONEWFLU
+
+  SUBROUTINE IOFREEFLU(KOFLU)
+    
+    INTEGER :: KOFLU
+    
+    IF ((KOFLU .GE. JPRESERVED_UNIT) .AND. (KOFLU .LE. JPMAX_UNIT_NUMBER )) THEN 
+       GALLOC(KOFLU) = .FALSE.
+    ELSE
+       print*,"mode_io.f90: IOFREEFLU BAD IUNIT=",KOFLU
+       STOP "mode_io.f90: IOFREEFLU BAD IUNIT"
+    END IF
+
+  END SUBROUTINE IOFREEFLU
+
+  FUNCTION UPCASE(HSTRING)
+    CHARACTER(LEN=*)            :: HSTRING
+    CHARACTER(LEN=LEN(HSTRING)) :: UPCASE
+
+    INTEGER :: JC
+    INTEGER, PARAMETER :: IAMIN = IACHAR("a")
+    INTEGER, PARAMETER :: IAMAJ = IACHAR("A")
+
+    DO JC=1,LEN(HSTRING)
+       IF (HSTRING(JC:JC) >= "a" .AND. HSTRING(JC:JC) <= "z") THEN
+          UPCASE(JC:JC) = ACHAR(IACHAR(HSTRING(JC:JC)) - IAMIN + IAMAJ)
+       ELSE
+          UPCASE(JC:JC) = HSTRING(JC:JC)
+       END IF
+    END DO
+
+  END FUNCTION UPCASE
+
+  SUBROUTINE SET_CONFIO_ll(OIOCDF4, OFORCELFIOUT, OFORCELFIREAD)
+    USE MODD_IO_ll, ONLY : LIOCDF4, LLFIOUT, LLFIREAD
+    LOGICAL, INTENT(IN)           :: OIOCDF4
+    LOGICAL, INTENT(IN), OPTIONAL :: OFORCELFIOUT, OFORCELFIREAD
+
+    LOGICAL :: GFORCELFIOUT, GFORCELFIREAD
+
+    IF (GCONFIO) THEN
+       PRINT *, 'SET_CONFIO_ll already called (ignoring this call).' 
+    ELSE
+       IF (PRESENT(OFORCELFIOUT)) THEN
+          GFORCELFIOUT = OFORCELFIOUT
+       ELSE
+          GFORCELFIOUT = .FALSE.
+       END IF
+       IF (PRESENT(OFORCELFIREAD)) THEN
+          GFORCELFIREAD = OFORCELFIREAD
+       ELSE
+          GFORCELFIREAD = .FALSE.
+       END IF
+
+#if defined(MNH_IOCDF4)
+       !PRINT *, 'SET_CONFIO_ll : sources compiled WITH IOCDF4 support.'       
+       LIOCDF4  = OIOCDF4
+       LLFIOUT  = (.NOT. OIOCDF4 .OR. GFORCELFIOUT)
+       LLFIREAD = GFORCELFIREAD
+#else
+       !PRINT *, 'SET_CONFIO_ll : sources compiled WITHOUT IOCDF4 support.'       
+       LIOCDF4 = .FALSE.
+       LLFIOUT = .TRUE.
+       LLFIREAD = .TRUE.
+#endif       
+       GCONFIO = .TRUE.
+    END IF
+    
+  END SUBROUTINE SET_CONFIO_ll
+  
+  SUBROUTINE INITIO_ll()
+    USE  MODE_MNH_WORLD , ONLY :  INIT_NMNH_COMM_WORLD
+    USE MODD_IO_ll
+    IMPLICIT NONE
+
+    INTEGER :: IERR, IOS
+    LOGICAL :: GISINIT
+
+    ISTDERR = 0
+
+#ifndef CPLOASIS
+    CALL MPI_INITIALIZED(GISINIT, IERR)
+    IF (.NOT. GISINIT) THEN
+       !CALL MPI_INIT(IERR)
+       CALL INIT_NMNH_COMM_WORLD(IERR)
+       if (IERR .NE.0) STOP "mode_io.f90::INITIO_ll() MPI_INIT ---> PROBLEME WITH REMAPPING NMNH_COMM_WORLD "
+    END IF
+    !! Now MPI is initialized for sure
+#endif
+
+    CALL INITFD()
+
+    !! Default number for Processor I/O
+    ISIOP = 1
+
+    !! Get number of allocated processors
+    CALL MPI_COMM_SIZE(NMNH_COMM_WORLD, ISNPROC,IERR)
+    IF (ISNPROC==1) GSMONOPROC = .TRUE.
+
+    !! Store proc number
+    CALL MPI_COMM_RANK(NMNH_COMM_WORLD, ISP, IERR)
+    ISP = ISP + 1
+
+    !! Open /dev/null for GLOBAL mode
+#if defined(DEV_NULL)
+    OPEN(UNIT=JPFNULL,FILE=CFILENULL  ,ACTION='WRITE',IOSTAT=IOS)
+#else
+    OPEN(UNIT=JPFNULL,STATUS='SCRATCH',ACTION='WRITE',IOSTAT=IOS)
+#endif
+    IF (IOS > 0) THEN
+       WRITE(ISTDERR,*) 'Error OPENING /dev/null...'
+       CALL MPI_ABORT(NMNH_COMM_WORLD, IOS, IERR)
+    END IF
+
+    !! Init STDOUT and PIPE
+    IF (ISP == ISIOP) THEN
+       ISTDOUT = 6
+    ELSE
+       ISTDOUT = JPFNULL
+    END IF
+
+  END SUBROUTINE INITIO_ll
+
+  SUBROUTINE OPEN_ll(UNIT,    &
+       FILE,    &
+       MODE,    &
+       LFIPAR,  &
+       COMM,    &
+       STATUS,  &
+       ACCESS,  &
+       IOSTAT,  &
+       FORM,    &
+       RECL,    &
+       BLANK,   &
+       POSITION,&
+       ACTION,  &
+       DELIM,    &
+       PAD,      &
+       KNB_PROCIO,& 
+       KMELEV,&
+       OPARALLELIO)
+#if defined(MNH_IOCDF4)
+  USE MODD_NETCDF
+  USE MODE_NETCDF
+#endif
+  USE MODD_IO_ll
+    INTEGER,         INTENT(OUT)           :: UNIT  !! Different from fortran OPEN
+    CHARACTER(len=*),INTENT(IN),  OPTIONAL :: FILE
+    CHARACTER(len=*),INTENT(IN),  OPTIONAL :: MODE
+    TYPE(LFIPARAM),  POINTER,     OPTIONAL :: LFIPAR
+    CHARACTER(len=*),INTENT(IN),  OPTIONAL :: STATUS
+    CHARACTER(len=*),INTENT(IN),  OPTIONAL :: ACCESS
+    INTEGER,         INTENT(OUT)           :: IOSTAT
+    CHARACTER(len=*),INTENT(IN),  OPTIONAL :: FORM
+    INTEGER,         INTENT(IN),  OPTIONAL :: RECL
+    CHARACTER(len=*),INTENT(IN),  OPTIONAL :: BLANK
+    CHARACTER(len=*),INTENT(IN),  OPTIONAL :: POSITION
+    CHARACTER(len=*),INTENT(IN)            :: ACTION
+    CHARACTER(len=*),INTENT(IN),  OPTIONAL :: DELIM
+    CHARACTER(len=*),INTENT(IN),  OPTIONAL :: PAD
+    INTEGER,         INTENT(IN),  OPTIONAL :: COMM
+    !JUANZ
+    INTEGER,         INTENT(IN),  OPTIONAL :: KNB_PROCIO
+    INTEGER(KIND=LFI_INT), INTENT(IN),  OPTIONAL :: KMELEV    
+    LOGICAL,         INTENT(IN),  OPTIONAL :: OPARALLELIO
+    !JUANZ
+    !
+    ! local var
+    !
+    !JUANZ
+    CHARACTER(len=5)                      :: cfile
+    INTEGER                               :: ifile, irank_procio   
+    TYPE(FD_ll), POINTER                  :: TZFD_IOZ  
+    CHARACTER(len=128)                    :: YFILE_IOZ
+    INTEGER(KIND=LFI_INT)                 :: IRESOU,IMELEV,INPRAR
+    INTEGER(KIND=LFI_INT)                 :: INUMBR8,ININAR8    
+    LOGICAL(KIND=LFI_INT)                 :: GNAMFI8,GFATER8,GSTATS8 
+    !JUANZ
+
+#if defined(MNH_SX5) || defined(MNH_SP4) || defined(NAGf95) || defined(MNH_LINUX)
+    CHARACTER(len=20)    :: YSTATUS
+    CHARACTER(len=20)    :: YACCESS
+    CHARACTER(len=20)    :: YFORM
+    INTEGER              :: YRECL
+    INTEGER ,PARAMETER   :: RECL_DEF = 10000
+    CHARACTER(len=20)    :: YBLANK
+    CHARACTER(len=20)    :: YPOSITION
+    CHARACTER(len=20)    :: YDELIM
+    CHARACTER(len=20)    :: YPAD
+    !JUAN
+#endif
+    CHARACTER(len=20)    :: YACTION
+    CHARACTER(len=20)    :: YMODE
+    INTEGER              :: IOS,IERR
+    INTEGER(KIND=IDCDF_KIND) :: IOSCDF
+    INTEGER              :: ICOMM
+    INTEGER              :: ICMPRES
+    TYPE(FD_ll), POINTER :: TZFD, TZFDTEMP
+    ! didier
+    LOGICAL :: GEXISTS,GOPENED
+    INTEGER :: IUNIT
+    ! didier
+    !JUAN SX5 : probleme function retournant un pointer
+    TYPE(FD_ll), POINTER :: TZJUAN
+    LOGICAL               :: GPARALLELIO
+
+    IF ( PRESENT(OPARALLELIO) ) THEN
+      GPARALLELIO = OPARALLELIO
+    ELSE  !par defaut on active les IO paralleles en Z si possible
+      GPARALLELIO = .TRUE.
+    ENDIF
+
+#ifdef MNH_VPP
+    !! BUG Fuji avec RECL non fourni en argument de MYOPEN
+    INTEGER :: IRECSIZE     
+    IF (PRESENT(RECL)) THEN
+       IRECSIZE = RECL
+    ELSE 
+       IRECSIZE = 2147483647  ! Default value for FUJI RECL
+    END IF
+#endif
+
+    IOS = 0
+    IF (PRESENT(COMM)) THEN 
+       ICOMM = COMM
+    ELSE
+       ICOMM = NMNH_COMM_WORLD ! Default communicator
+    END IF
+
+    IF (PRESENT(MODE)) THEN 
+       YMODE = MODE
+       YMODE = UPCASE(TRIM(ADJUSTL(YMODE)))
+    ELSE 
+       YMODE = 'GLOBAL'         ! Default Mode
+    END IF
+
+    YACTION = ACTION
+    YACTION = UPCASE(TRIM(ADJUSTL(YACTION)))
+    IF (YACTION /= "READ" .AND. YACTION /= "WRITE") THEN
+       IOSTAT = 99
+       UNIT = -1
+       WRITE(ISTDERR,*) 'Erreur OPEN_ll : ACTION=',YACTION,' non supportee'
+       RETURN
+    END IF
+
+    IF (.NOT. ANY(YMODE == (/'GLOBAL     ','SPECIFIC   ','DISTRIBUTED' , 'IO_ZSPLIT  '/))) THEN
+       IOSTAT = 99
+       UNIT = -1
+       WRITE(ISTDERR,*) 'OPEN_ll error : MODE UNKNOWN'
+       RETURN
+    END IF
+
+    !JUAN SX5 : probleme function retournant un pointer
+    !IF (.NOT. ASSOCIATED(GETFD(FILE))) THEN
+    TZJUAN=>GETFD(FILE)
+    IF (.NOT. ASSOCIATED(TZJUAN)) THEN 
+       !JUAN SX5 : probleme function retournant un pointer
+       !! File is not already opened : GOOD
+       !! Add a new FD element
+       TZFD=>NEWFD()
+    ELSE 
+       !! Error : File already opened
+       IOSTAT = 99
+       UNIT = -1
+       WRITE(ISTDERR,*) 'OPEN_ll error : File', FILE, 'already opened'
+       RETURN
+    END IF
+
+!!$    CALL MPI_ALLREDUCE(ILOCALERR, IGLOBALERR, 1, MPI_INTEGER, MPI_BOR,&
+!!$         & ICOMM, IERR)
+!!$    IF (IGLOBALERR /= NOERROR) THEN 
+!!$       IOSTAT = GLOBALERR
+!!$       UNIT = -1
+!!$       RETURN 
+!!$    END IF
+
+
+
+    TZFD%NAME = FILE
+    TZFD%MODE = YMODE
+    NULLIFY(TZFD%PARAM)
+
+#if defined(MNH_SX5) || defined(MNH_SP4) || defined(NAGf95) || defined(MNH_LINUX)
+    !JUAN
+    IF (PRESENT(STATUS)) THEN
+       YSTATUS=STATUS
+    ELSE
+       YSTATUS='UNKNOWN'
+    ENDIF
+    IF (PRESENT(ACCESS)) THEN
+       YACCESS=ACCESS
+    ELSE
+       YACCESS='SEQUENTIAL'
+    ENDIF
+    IF (PRESENT(FORM)) THEN
+       YFORM=FORM
+    ELSE
+       YFORM='FORMATTED'
+    ENDIF
+    IF (PRESENT(RECL)) THEN
+       YRECL=RECL
+    ELSE
+       YRECL=RECL_DEF
+    ENDIF
+    IF (PRESENT(BLANK)) THEN
+       YBLANK=BLANK
+    ELSE
+       YBLANK='NULL'
+    ENDIF
+    IF (PRESENT(POSITION)) THEN
+       YPOSITION=POSITION
+    ELSE
+       YPOSITION='ASIS'
+    ENDIF
+    IF (PRESENT(DELIM)) THEN
+       YDELIM=DELIM
+    ELSE
+       YDELIM='NONE'
+    ENDIF
+    IF (PRESENT(PAD)) THEN
+       YPAD=PAD
+    ELSE
+       YPAD='YES'
+    ENDIF
+#endif
+
+    SELECT CASE(YMODE)
+
+    CASE('GLOBAL')
+       IF (YACTION == 'READ') THEN
+          TZFD%OWNER = ISP
+       ELSE 
+          TZFD%OWNER = ISIOP
+       END IF
+
+       IF (ISP == TZFD%OWNER) THEN 
+          !! I/O processor case
+
+          TZFD%FLU = IONEWFLU()
+#ifdef MNH_VPP
+          OPEN(UNIT=TZFD%FLU,       &
+               FILE=TRIM(TZFD%NAME),&
+               STATUS=STATUS,       &
+               ACCESS=ACCESS,       &
+               IOSTAT=IOS,          &
+               FORM=FORM,           &
+               RECL=IRECSIZE,       &
+               BLANK=BLANK,         &
+               POSITION=POSITION,   &
+               ACTION=YACTION,      &
+               DELIM=DELIM,         &
+               PAD=PAD)
+
+#else
+#if defined(MNH_SX5) || defined(MNH_SP4) || defined(NAGf95) || defined(MNH_LINUX)
+          !JUAN : 31/03/2000 modif pour acces direct
+          IF (YACCESS=='DIRECT') THEN
+             OPEN(UNIT=TZFD%FLU,       &
+                  FILE=TRIM(TZFD%NAME),&
+                  STATUS=YSTATUS,       &
+                  ACCESS=YACCESS,       &
+                  IOSTAT=IOS,          &
+                  FORM=YFORM,           &
+                  RECL=YRECL,           &
+                  ACTION=YACTION)
+          ELSE
+             IF (YFORM=="FORMATTED") THEN
+               IF (ACTION=='READ') THEN
+                OPEN(UNIT=TZFD%FLU,       &
+                     FILE=TRIM(TZFD%NAME),&
+                     STATUS=YSTATUS,       &
+                     ACCESS=YACCESS,       &
+                     IOSTAT=IOS,          &
+                     FORM=YFORM,           &
+                     RECL=YRECL,           &
+                     BLANK=YBLANK,         &
+                     POSITION=YPOSITION,   &
+                     ACTION=YACTION,      &
+                     !DELIM=YDELIM,         & !Philippe: commented because bug with GCC 5.X
+                     PAD=YPAD)
+               ELSE
+                OPEN(UNIT=TZFD%FLU,       &
+                     FILE=TRIM(TZFD%NAME),&
+                     STATUS=YSTATUS,       &
+                     ACCESS=YACCESS,       &
+                     IOSTAT=IOS,          &
+                     FORM=YFORM,           &
+                     RECL=YRECL,           &
+                     BLANK=YBLANK,         &
+                     POSITION=YPOSITION,   &
+                     ACTION=YACTION,      &
+                     DELIM=YDELIM,         &
+                     PAD=YPAD)
+               ENDIF
+             ELSE
+                OPEN(UNIT=TZFD%FLU,       &
+                     FILE=TRIM(TZFD%NAME),&
+                     STATUS=YSTATUS,       &
+                     ACCESS=YACCESS,       &
+                     IOSTAT=IOS,          &
+                     FORM=YFORM,           &
+                     RECL=YRECL,           &
+                     POSITION=YPOSITION,   &
+                     ACTION=YACTION)
+             ENDIF
+          ENDIF
+
+
+          !print*,' OPEN_ll'
+          !print*,' OPEN(UNIT=',TZFD%FLU       
+          !print*,' FILE=',TRIM(TZFD%NAME)
+          !print*,' STATUS=',YSTATUS       
+          !print*,' ACCESS=',YACCESS
+          !print*,' IOSTAT=',IOS
+          !print*,' FORM=',YFORM
+          !print*,' RECL=',YRECL
+          !print*,' BLANK=',YBLANK
+          !print*,' POSITION=',YPOSITION
+          !print*,' ACTION=',YACTION
+          !print*,' DELIM=',YDELIM
+          !print*,' PAD=',YPAD
+#else
+          OPEN(UNIT=TZFD%FLU,       &
+               FILE=TRIM(TZFD%NAME),&
+               STATUS=STATUS,       &
+               ACCESS=ACCESS,       &
+               IOSTAT=IOS,          &
+               FORM=FORM,           &
+               RECL=RECL,           &
+               BLANK=BLANK,         &
+               POSITION=POSITION,   &
+               ACTION=YACTION,      &
+               DELIM=DELIM,         &
+               PAD=PAD)
+#endif
+
+#endif
+
+       ELSE 
+          !! NON I/O processors case
+          IOS = 0
+          TZFD%FLU = JPFNULL 
+       END IF
+
+    CASE('SPECIFIC')
+       TZFD%OWNER = ISP
+       TZFD%FLU = IONEWFLU()
+
+#ifdef MNH_VPP
+       OPEN(UNIT=TZFD%FLU,                      &
+            FILE=TRIM(TZFD%NAME)//SUFFIX(".P"), &
+            STATUS=STATUS,                         &
+            ACCESS=ACCESS,                         &
+            IOSTAT=IOS,                            &
+            FORM=FORM,                             &
+            RECL=IRECSIZE,                         &
+            BLANK=BLANK,                           &
+            POSITION=POSITION,                     &
+            ACTION=YACTION,                        &
+            DELIM=DELIM,                           &
+            PAD=PAD)
+
+#else
+#if defined(MNH_SX5) || defined(MNH_SP4) || defined(NAGf95) || defined(MNH_LINUX)
+       IF (ACCESS=='DIRECT') THEN
+          OPEN(UNIT=TZFD%FLU,       &
+               FILE=TRIM(TZFD%NAME)//SUFFIX(".P"), &
+               STATUS=YSTATUS,       &
+               ACCESS=YACCESS,       &
+               IOSTAT=IOS,          &
+               FORM=YFORM,           &
+               RECL=YRECL,           &
+               ACTION=YACTION)
+       ELSE
+        IF (ACTION=='READ') THEN
+          OPEN(UNIT=TZFD%FLU,                      &
+               FILE=TRIM(TZFD%NAME)//SUFFIX(".P"), &
+               STATUS=YSTATUS,                         &
+               ACCESS=YACCESS,                         &
+               IOSTAT=IOS,                             &
+               FORM=YFORM,                             &
+               RECL=YRECL,                             &
+               BLANK=YBLANK,                           &
+               POSITION=YPOSITION,                     &
+               ACTION=YACTION,                         &
+               !DELIM=YDELIM,         & !Philippe: commented because bug with GCC 5.X
+               PAD=YPAD)
+         ELSE
+          OPEN(UNIT=TZFD%FLU,                      &
+               FILE=TRIM(TZFD%NAME)//SUFFIX(".P"), &
+               STATUS=YSTATUS,                         &
+               ACCESS=YACCESS,                         &
+               IOSTAT=IOS,                             &
+               FORM=YFORM,                             &
+               RECL=YRECL,                             &
+               BLANK=YBLANK,                           &
+               POSITION=YPOSITION,                     &
+               ACTION=YACTION,                         &
+               DELIM=YDELIM,                           &
+               PAD=YPAD)
+         ENDIF
+       ENDIF
+#else
+       OPEN(UNIT=TZFD%FLU,                      &
+            FILE=TRIM(TZFD%NAME)//SUFFIX(".P"), &
+            STATUS=STATUS,                         &
+            ACCESS=ACCESS,                         &
+            IOSTAT=IOS,                            &
+            FORM=FORM,                             &
+            RECL=RECL,                             &
+            BLANK=BLANK,                           &
+            POSITION=POSITION,                     &
+            ACTION=YACTION,                        &
+            DELIM=DELIM,                           &
+            PAD=PAD)
+#endif
+
+#endif
+
+    CASE('DISTRIBUTED')
+       TZFD%OWNER = ISIOP
+       IF (.NOT. PRESENT(LFIPAR)) THEN
+          PRINT *,"ERROR OPEN_ll : LFI non present"
+          RETURN
+       END IF
+       TZFD%PARAM=>LFIPAR
+
+       IF (ISP == TZFD%OWNER) THEN 
+          TZFD%FLU = IONEWFLU()
+       ELSE 
+          !! NON I/O processors case
+          IOS = 0
+          TZFD%FLU = -1
+       END IF
+
+    CASE('IO_ZSPLIT')
+
+       TZFD%OWNER = ISIOP
+       TZFD%NAME  = TRIM(FILE)//".lfi"
+       IF (PRESENT(KNB_PROCIO)) THEN
+          TZFD%NB_PROCIO = KNB_PROCIO
+       ELSE
+          TZFD%NB_PROCIO = 1
+       ENDIF
+       IF( .NOT. GPARALLELIO ) THEN
+         TZFD%NB_PROCIO = 1
+       ENDIF
+       TZFD%COMM = NMNH_COMM_WORLD
+       TZFD%PARAM     =>LFIPAR
+#if defined(MNH_IOCDF4)
+       IF (ISP == TZFD%OWNER .AND. (.NOT. LIOCDF4 .OR. (YACTION=='WRITE' .AND. LLFIOUT) &
+            &                                     .OR. (YACTION=='READ'  .AND. LLFIREAD))) THEN
+#else
+       IF (ISP == TZFD%OWNER) THEN
+#endif
+             TZFD%FLU = IONEWFLU()
+       ELSE 
+          !! NON I/O processors OR NetCDF read case 
+          IOS = 0
+          TZFD%FLU = -1
+       END IF
+       IF (TZFD%NB_PROCIO .GT. 1 ) THEN
+          DO ifile=0,TZFD%NB_PROCIO-1
+             irank_procio = 1 + io_rank(ifile,ISNPROC,TZFD%NB_PROCIO)
+             write(cfile ,'(".Z",i3.3)') ifile+1
+             YFILE_IOZ           = TRIM(FILE)//cfile//".lfi"
+             TZFD_IOZ           =>NEWFD()
+             TZFD_IOZ%NAME      = YFILE_IOZ
+             TZFD_IOZ%MODE      = 'IO_ZSPLIT'
+             TZFD_IOZ%OWNER     = irank_procio
+             TZFD_IOZ%COMM      = NMNH_COMM_WORLD
+             TZFD_IOZ%NB_PROCIO = TZFD%NB_PROCIO
+             TZFD_IOZ%FLU       = -1
+             TZFD_IOZ%PARAM     =>LFIPAR
+
+             IF ( irank_procio .EQ. ISP ) THEN
+#if defined(MNH_IOCDF4)                   
+                IF (LIOCDF4) THEN
+                   IF (YACTION == 'READ' .AND. .NOT. LLFIREAD) THEN
+                      ! Open NetCDF File for reading
+                      TZFD_IOZ%CDF => NEWIOCDF()
+                      IOSCDF = NF_OPEN(TRIM(FILE)//cfile//".nc4", NF_NOWRITE, TZFD_IOZ%CDF%NCID)
+                      IF (IOSCDF /= NF_NOERR) THEN
+   PRINT *, 'Error in opening (NF_OPEN) ', TRIM(FILE)//cfile//'.nc4', ' : ', NF_STRERROR(IOS)
+                         STOP
+                      ELSE
+                         IOS = 0
+                      END IF
+                      PRINT *, 'NF_OPEN(IO_ZSPLIT): ',TRIM(FILE)//cfile//'.nc4'
+                   END IF
+                   
+                   IF (YACTION == 'WRITE') THEN
+                      ! YACTION == 'WRITE'
+                      ! Create NetCDF File for writing
+                      TZFD_IOZ%CDF => NEWIOCDF()
+                      IOSCDF = NF_CREATE(TRIM(FILE)//cfile//".nc4", &
+                           &IOR(NF_CLOBBER,NF_NETCDF4), TZFD_IOZ%CDF%NCID)
+                      IF (IOSCDF /= NF_NOERR) THEN
+                         PRINT *, 'Error in opening (NF_CREATE) ', TRIM(FILE)//cfile//'.nc4', ' : ', NF_STRERROR(IOS)
+                         STOP
+                      ELSE
+                         IOS = 0
+                      END IF
+                      PRINT *, 'NF_CREATE(IO_ZSPLIT): ',TRIM(FILE)//cfile//'.nc4'
+                   END IF
+                END IF
+#endif
+                IF (.NOT. LIOCDF4 .OR. (YACTION=='WRITE' .AND. LLFIOUT)&
+                     &            .OR. (YACTION=='READ'  .AND. LLFIREAD)) THEN
+                   ! LFI case
+                   ! Open LFI File for reading
+                   !this proc must write on this file open it ...    
+                   TZFD_IOZ%FLU       = IONEWFLU()
+                   !! LFI-File case
+                   IRESOU = 0
+                   GNAMFI8 = .TRUE.
+                   GFATER8 = .TRUE.
+                   GSTATS8 = .FALSE.
+                   IF (PRESENT(KMELEV)) THEN
+                      IMELEV = KMELEV
+                   ELSE
+                      IMELEV = 0
+                   ENDIF
+                   INPRAR = 49
+                   !
+                   ! JUAN open lfi file temporary modif
+                   !
+                   INUMBR8 = TZFD_IOZ%FLU
+                   CALL LFIOUV(IRESOU,     &
+                        INUMBR8,           &
+                        GNAMFI8,           &
+                        TZFD_IOZ%NAME,     &
+                        "UNKNOWN",         &
+                        GFATER8,           &
+                        GSTATS8,           &
+                        IMELEV,            &
+                        INPRAR,            &
+                        ININAR8)
+                   !KNINAR = ININAR8
+                END IF
+             ENDIF
+          ENDDO
+       END IF
+
+
+    END SELECT
+
+    ! Recherche d'un communicateur a reutiliser
+    ! TZFD is the first element
+
+    TZFD%COMM = ICOMM
+!!$    TZFD%COMM = MPI_COMM_NULL
+
+!!$    TZFDTEMP=>TZFD%NEXT
+!!$    DO WHILE(ASSOCIATED(TZFDTEMP))
+!!$       CALL MPI_COMM_COMPARE(ICOMM,TZFDTEMP%COMM,ICMPRES,IERR)
+!!$       IF (ICMPRES == MPI_CONGRUENT) THEN
+!!$          TZFD%COMM = TZFDTEMP%COMM
+!!$          EXIT
+!!$       END IF
+!!$       TZFDTEMP=>TZFDTEMP%NEXT
+!!$    END DO
+!!$
+!!$    IF (TZFD%COMM == MPI_COMM_NULL) THEN
+!!$       ! Pas de communicateur equivalent -> on duplique
+!!$       !
+!!$       CALL MPI_COMM_DUP(ICOMM, TZFD%COMM, IERR)
+!!$       !       WRITE(ISTDOUT,*) 'FILE = ',TZFD%NAME,', comm ',TZFD%COMM&
+!!$       !            & , ' cree par duplication de comm ', ICOMM
+!!$    END IF
+
+    IOSTAT = IOS
+    UNIT = TZFD%FLU
+
+  CONTAINS
+    FUNCTION SUFFIX(HEXT)
+
+      CHARACTER(len=*)             :: HEXT
+      CHARACTER(len=LEN(HEXT)+3)   :: SUFFIX
+
+      WRITE(SUFFIX,'(A,i3.3)') TRIM(HEXT), ISP
+
+    END FUNCTION SUFFIX
+
+  END SUBROUTINE OPEN_ll
+
+  SUBROUTINE CLOSE_ll(HFILE,IOSTAT,STATUS,OPARALLELIO)
+  USE MODD_IO_ll
+#if defined(MNH_IOCDF4)
+  USE MODE_NETCDF
+#endif
+    CHARACTER(LEN=*), INTENT(IN)            :: HFILE
+    INTEGER,          INTENT(OUT), OPTIONAL :: IOSTAT
+    CHARACTER(LEN=*), INTENT(IN),  OPTIONAL :: STATUS
+    LOGICAL,          INTENT(IN),  OPTIONAL :: OPARALLELIO
+
+    TYPE(FD_ll), POINTER :: TZFD
+    INTEGER :: OLDCOMM
+
+    INTEGER :: IERR, IGLOBALERR, IRESP
+
+    CHARACTER(LEN=100)                      :: STATUSL
+    !JUANZ
+    CHARACTER(len=5)                      :: yfile
+    INTEGER                               :: ifile, irank_procio,ilen   
+    TYPE(FD_ll), POINTER                  :: TZFD_IOZ  
+    CHARACTER(len=128)                    :: YFILE_IOZ
+    INTEGER(KIND=LFI_INT)                 :: IRESP8,INUM8
+    CHARACTER(LEN=7)                      :: YSTATU  
+    LOGICAL                               :: GPARALLELIO
+
+    IF ( PRESENT(OPARALLELIO) ) THEN
+      GPARALLELIO = OPARALLELIO
+    ELSE  !par defaut on active les IO paralleles en Z si possible
+      GPARALLELIO = .TRUE.
+    ENDIF
+    !JUANZ
+
+    TZFD=>GETFD(HFILE)
+
+    IF (.NOT. ASSOCIATED(TZFD)) THEN
+       WRITE(ISTDOUT,*) 'Erreur CLOSE_ll : Fichier : ', HFILE, ' non&
+            & present...'
+       IF (PRESENT(IOSTAT)) IOSTAT = BADVALUE
+       RETURN
+    END IF
+
+    IRESP      = 0
+    IGLOBALERR = 0
+    IF (PRESENT(STATUS))  THEN
+       STATUSL = STATUS
+    ELSE
+       STATUSL = "KEEP"
+    ENDIF
+
+    SELECT CASE(TZFD%MODE)
+    CASE('GLOBAL','SPECIFIC')
+       IF (TZFD%OWNER == ISP) THEN
+          CLOSE(UNIT=TZFD%FLU, IOSTAT=IRESP,STATUS=STATUSL)
+          CALL IOFREEFLU(TZFD%FLU)
+       END IF
+       CALL MPI_ALLREDUCE(IRESP,IGLOBALERR,1,MPI_INTEGER,MPI_BOR,TZFD&
+            & %COMM,IERR)
+    CASE('DISTRIBUTED')
+       ! nothing to close with FM-Files
+
+    CASE('IO_ZSPLIT')
+       !
+       ! close LFI file in the different PROC
+       !
+       IF( .NOT. GPARALLELIO ) THEN
+         TZFD%NB_PROCIO = 1
+       ENDIF
+       IF (TZFD%NB_PROCIO .GT. 1 ) THEN
+          DO ifile=0,TZFD%NB_PROCIO-1
+             irank_procio = 1 + io_rank(ifile,ISNPROC,TZFD%NB_PROCIO)
+             write(yfile ,'(".Z",i3.3)') ifile+1
+             ilen = len_trim(TZFD%NAME)
+             YFILE_IOZ   = TRIM(TZFD%NAME(1:ilen-4))//yfile//".lfi"
+             TZFD_IOZ => GETFD(YFILE_IOZ)
+             IF (ISP == TZFD_IOZ%OWNER) THEN
+                IF (TZFD_IOZ%FLU > 0) THEN
+                   INUM8=TZFD_IOZ%FLU
+                   CALL LFIFER(IRESP8,INUM8,YSTATU)
+                   CALL IOFREEFLU(TZFD_IOZ%FLU)
+                   IRESP = IRESP8
+                END IF
+                IF (ASSOCIATED(TZFD_IOZ%CDF)) CALL CLEANIOCDF(TZFD_IOZ%CDF)
+             END IF
+          END DO
+       END IF
+    END SELECT
+
+    OLDCOMM = TZFD%COMM   !! Recopie dans var. temporaire
+
+    CALL DELFD(TZFD)
+
+!!$    IF (IRESP == IGLOBALERR) THEN
+!!$
+!!$       ! liberation du communicateur
+!!$       !
+!!$       TZFD=>GETFD(OLDCOMM)
+!!$
+!!$       IF (.NOT. ASSOCIATED(TZFD)) THEN
+!!$          CALL MPI_COMM_FREE(OLDCOMM, IERR)
+!!$       END IF
+!!$    END IF
+
+    IF (PRESENT(IOSTAT)) IOSTAT = IGLOBALERR
+
+  END SUBROUTINE CLOSE_ll
+
+  SUBROUTINE FLUSH_ll(HFILE,IRESP)
+#if defined(NAGf95)
+    USE F90_UNIX
+#endif
+    USE MODD_IO_ll
+    CHARACTER(LEN=*), INTENT(IN)            :: HFILE
+    INTEGER,          INTENT(OUT), OPTIONAL :: IRESP
+
+    TYPE(FD_ll), POINTER :: TZFD
+    INTEGER              :: IUNIT
+
+    IRESP=0
+    TZFD=>GETFD(HFILE)
+    IF (.NOT. ASSOCIATED(TZFD)) THEN
+       WRITE(ISTDOUT,*) 'Error in FLUSH_ll : file ',TRIM(HFILE),&
+            &' not present !'
+       IF (PRESENT(IRESP)) IRESP = BADVALUE
+       RETURN
+    END IF
+
+    IUNIT=TZFD%FLU
+    IF (TZFD%OWNER == ISP .AND. TZFD%MODE /= 'DISTRIBUTED') THEN
+#if defined(MNH_SP4)
+       CALL FLUSH(IUNIT)
+#else
+       CALL FLUSH(IUNIT)
+#endif
+    END IF
+
+  END SUBROUTINE FLUSH_ll
+
+  FUNCTION io_file(k,nb_proc_io)
+    !
+    ! return the file number where to write the K level of data
+    !
+    IMPLICIT NONE
+    INTEGER(kind=MNH_MPI_RANK_KIND)                   :: k,nb_proc_io
+    INTEGER(kind=MNH_MPI_RANK_KIND)                   :: io_file
+
+    io_file = MOD ((k-1) , nb_proc_io )
+
+  END FUNCTION io_file
+
+  FUNCTION io_rank(ifile,nb_proc,nb_proc_io,offset_rank)
+    !
+    ! return the proc number which must write the 'ifile' file
+    !
+    IMPLICIT NONE
+    INTEGER(kind=MNH_MPI_RANK_KIND)                  :: ifile,nb_proc,nb_proc_io
+    INTEGER(kind=MNH_MPI_RANK_KIND),OPTIONAL         :: offset_rank
+
+    INTEGER(kind=MNH_MPI_RANK_KIND)                  :: io_rank
+
+    INTEGER(kind=MNH_MPI_RANK_KIND)                  :: ipas,irest
+
+    ipas  =        nb_proc / nb_proc_io
+    irest =  MOD ( nb_proc , nb_proc_io )
+
+    IF  (ipas /= 0 ) THEN
+       io_rank=ipas * ifile + MIN(ifile , irest )
+    ELSE
+       io_rank=MOD(ifile , nb_proc )
+    ENDIF
+
+    !
+    ! optional rank to shift for read test
+    !
+    IF (PRESENT(offset_rank)) THEN
+       IF ( offset_rank .GT.0 ) io_rank=MOD(io_rank+offset_rank,nb_proc)
+       IF ( offset_rank .LT.0 ) io_rank=MOD(nb_proc-io_rank+offset_rank,nb_proc)
+    ENDIF
+
+  END FUNCTION io_rank
+
+
+END MODULE MODE_IO_ll
diff --git a/src/ARCH_SRC/CPL_WAVE/SURFEX/coare30_flux.F90 b/src/ARCH_SRC/CPL_WAVE/SURFEX/coare30_flux.F90
new file mode 100644
index 0000000000000000000000000000000000000000..e1cdf085020a7e18097e273c9b301d74cb2d73b3
--- /dev/null
+++ b/src/ARCH_SRC/CPL_WAVE/SURFEX/coare30_flux.F90
@@ -0,0 +1,541 @@
+!SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence
+!SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!SFX_LIC for details. version 1.
+!     #########
+    SUBROUTINE COARE30_FLUX (S, &
+                             PZ0SEA,PTA,PEXNA,PRHOA,PSST,PEXNS,PQA,  &
+            PVMOD,PZREF,PUREF,PPS,PQSAT,PSFTH,PSFTQ,PUSTAR,PCD,PCDN,PCH,PCE,PRI,&
+            PRESA,PRAIN,PZ0HSEA,PHS,PTP)  
+!     #######################################################################
+!
+!
+!!****  *COARE25_FLUX*  
+!!
+!!    PURPOSE
+!!    -------
+!      Calculate the surface fluxes of heat, moisture, and momentum over
+!      sea surface with bulk algorithm COARE3.0. 
+!     
+!!**  METHOD
+!!    ------
+!      transfer coefficients were obtained using a dataset which combined COARE
+!      data with those from three other ETL field experiments, and reanalysis of
+!      the HEXMAX data (DeCosmos et al. 1996). 
+!      ITERMAX=3 
+!      Take account of the surface gravity waves on the velocity roughness and 
+!      hence the momentum transfer coefficient
+!        NGRVWAVES=0 no gravity waves action (Charnock) !default value
+!        NGRVWAVES=1 wave age parameterization of Oost et al. 2002
+!        NGRVWAVES=2 model of Taylor and Yelland 2001
+!
+!!    EXTERNAL
+!!    --------
+!!
+!!    IMPLICIT ARGUMENTS
+!!    ------------------ 
+!!      
+!!    REFERENCE
+!!    ---------
+!!      Fairall et al (2003), J. of Climate, vol. 16, 571-591
+!!      Fairall et al (1996), JGR, 3747-3764
+!!      Gosnell et al (1995), JGR, 437-442
+!!      Fairall et al (1996), JGR, 1295-1308
+!!      
+!!    AUTHOR
+!!    ------
+!!     C. Lebeaupin  *Météo-France* (adapted from C. Fairall's code)
+!!
+!!    MODIFICATIONS
+!!    -------------
+!!      Original     1/06/2006
+!!      B. Decharme    06/2009 limitation of Ri
+!!      B. Decharme    09/2012 Bug in Ri calculation and limitation of Ri in surface_ri.F90
+!!      B. Decharme    06/2013 bug in z0 (output) computation
+!!      M.N. Bouin     03/2014 possibility of wave parameters from external source
+!!      C. Lebeaupin   03/2014 bug if PTA=PSST and PEXNA=PEXNS: set a minimum value
+!!	   	       	       add abort if no convergence
+!!      C. Lebeaupin   06/2014 itermax=10 for low wind conditions (ZVMOD<=1)
+!!      J. Pianezze    11/2014 add coupling wave parameters 
+!-------------------------------------------------------------------------------
+!
+!*       0.     DECLARATIONS
+!               ------------
+!
+!
+USE MODD_SEAFLUX_n, ONLY : SEAFLUX_t
+!
+USE MODD_CSTS,       ONLY : XKARMAN, XG, XSTEFAN, XRD, XRV, XPI, &
+                            XLVTT, XCL, XCPD, XCPV, XRHOLW, XTT, &
+                            XP00
+USE MODD_SURF_ATM,   ONLY : XVZ0CM
+!
+USE MODD_SFX_OASIS,  ONLY : LCPL_WAVE
+USE MODD_SURF_PAR,   ONLY : XUNDEF, XSURF_EPSILON
+USE MODD_WATER_PAR
+!
+USE MODI_SURFACE_RI
+USE MODI_WIND_THRESHOLD
+USE MODE_COARE30_PSI
+!
+USE MODE_THERMOS
+!
+!
+USE MODI_ABOR1_SFX
+!
+!
+USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
+USE PARKIND1  ,ONLY : JPRB
+!
+IMPLICIT NONE
+!
+!*      0.1    declarations of arguments
+!
+!
+!
+TYPE(SEAFLUX_t), INTENT(INOUT) :: S
+!
+REAL, DIMENSION(:), INTENT(IN)       :: PTA   ! air temperature at atm. level (K)
+REAL, DIMENSION(:), INTENT(IN)       :: PQA   ! air humidity at atm. level (kg/kg)
+REAL, DIMENSION(:), INTENT(IN)       :: PEXNA ! Exner function at atm. level
+REAL, DIMENSION(:), INTENT(IN)       :: PRHOA ! air density at atm. level
+REAL, DIMENSION(:), INTENT(IN)       :: PVMOD ! module of wind at atm. wind level (m/s)
+REAL, DIMENSION(:), INTENT(IN)       :: PZREF ! atm. level for temp. and humidity (m)
+REAL, DIMENSION(:), INTENT(IN)       :: PUREF ! atm. level for wind (m)
+REAL, DIMENSION(:), INTENT(IN)       :: PSST  ! Sea Surface Temperature (K)
+REAL, DIMENSION(:), INTENT(IN)       :: PEXNS ! Exner function at sea surface
+REAL, DIMENSION(:), INTENT(IN)       :: PPS   ! air pressure at sea surface (Pa)
+REAL, DIMENSION(:), INTENT(IN)       :: PRAIN !precipitation rate (kg/s/m2)
+REAL, DIMENSION(:), INTENT(IN)       :: PHS   ! wave significant height
+REAL, DIMENSION(:), INTENT(IN)       :: PTP   ! wave peak period
+!
+REAL, DIMENSION(:), INTENT(INOUT)    :: PZ0SEA! roughness length over the ocean
+!                                                                                 
+!  surface fluxes : latent heat, sensible heat, friction fluxes
+REAL, DIMENSION(:), INTENT(OUT)      :: PSFTH ! heat flux (W/m2)
+REAL, DIMENSION(:), INTENT(OUT)      :: PSFTQ ! water flux (kg/m2/s)
+REAL, DIMENSION(:), INTENT(OUT)      :: PUSTAR! friction velocity (m/s)
+!
+! diagnostics
+REAL, DIMENSION(:), INTENT(OUT)      :: PQSAT ! humidity at saturation
+REAL, DIMENSION(:), INTENT(OUT)      :: PCD   ! heat drag coefficient
+REAL, DIMENSION(:), INTENT(OUT)      :: PCDN  ! momentum drag coefficient
+REAL, DIMENSION(:), INTENT(OUT)      :: PCH   ! neutral momentum drag coefficient
+REAL, DIMENSION(:), INTENT(OUT)      :: PCE  !transfer coef. for latent heat flux
+REAL, DIMENSION(:), INTENT(OUT)      :: PRI   ! Richardson number
+REAL, DIMENSION(:), INTENT(OUT)      :: PRESA ! aerodynamical resistance
+REAL, DIMENSION(:), INTENT(OUT)      :: PZ0HSEA ! heat roughness length
+!
+!
+!*      0.2    declarations of local variables
+!
+REAL, DIMENSION(SIZE(PTA))      :: ZVMOD    ! wind intensity
+REAL, DIMENSION(SIZE(PTA))      :: ZPA      ! Pressure at atm. level
+REAL, DIMENSION(SIZE(PTA))      :: ZTA      ! Temperature at atm. level
+REAL, DIMENSION(SIZE(PTA))      :: ZQASAT   ! specific humidity at saturation  at atm. level (kg/kg)
+!
+REAL, DIMENSION(SIZE(PTA))      :: ZO       ! rougness length ref 
+REAL, DIMENSION(SIZE(PTA))      :: ZWG      ! gustiness factor (m/s)
+!
+REAL, DIMENSION(SIZE(PTA))      :: ZDU,ZDT,ZDQ,ZDUWG !differences
+!
+REAL, DIMENSION(SIZE(PTA))      :: ZUSR        !velocity scaling parameter "ustar" (m/s) = friction velocity
+REAL, DIMENSION(SIZE(PTA))      :: ZTSR        !temperature sacling parameter "tstar" (degC)
+REAL, DIMENSION(SIZE(PTA))      :: ZQSR        !humidity scaling parameter "qstar" (kg/kg)
+!
+REAL, DIMENSION(SIZE(PTA))      :: ZU10,ZT10   !vertical profils (10-m height) 
+REAL, DIMENSION(SIZE(PTA))      :: ZVISA       !kinematic viscosity of dry air
+REAL, DIMENSION(SIZE(PTA))      :: ZO10,ZOT10  !roughness length at 10m
+REAL, DIMENSION(SIZE(PTA))      :: ZCD,ZCT,ZCC
+REAL, DIMENSION(SIZE(PTA))      :: ZCD10,ZCT10 !transfer coef. at 10m
+REAL, DIMENSION(SIZE(PTA))      :: ZRIBU,ZRIBCU
+REAL, DIMENSION(SIZE(PTA))      :: ZETU,ZL10
+!
+REAL, DIMENSION(SIZE(PTA))      :: ZCHARN                      !Charnock number depends on wind module
+REAL, DIMENSION(SIZE(PTA))      :: ZTWAVE,ZHWAVE,ZCWAVE,ZLWAVE !to compute gravity waves' impact
+!
+REAL, DIMENSION(SIZE(PTA))      :: ZZL,ZZTL!,ZZQL    !Obukhovs stability 
+                                                     !param. z/l for u,T,q
+REAL, DIMENSION(SIZE(PTA))      :: ZRR
+REAL, DIMENSION(SIZE(PTA))      :: ZOT,ZOQ           !rougness length ref
+REAL, DIMENSION(SIZE(PTA))      :: ZPUZ,ZPTZ,ZPQZ    !PHI funct. for u,T,q 
+!
+REAL, DIMENSION(SIZE(PTA))      :: ZBF               !constants to compute gustiness factor
+!
+REAL, DIMENSION(SIZE(PTA))      :: ZTAU       !momentum flux (W/m2)
+REAL, DIMENSION(SIZE(PTA))      :: ZHF        !sensible heat flux (W/m2)
+REAL, DIMENSION(SIZE(PTA))      :: ZEF        !latent heat flux (W/m2)
+REAL, DIMENSION(SIZE(PTA))      :: ZWBAR      !diag for webb correction but not used here after
+REAL, DIMENSION(SIZE(PTA))      :: ZTAUR      !momentum flux due to rain (W/m2)
+REAL, DIMENSION(SIZE(PTA))      :: ZRF        !sensible heat flux due to rain (W/m2)
+REAL, DIMENSION(SIZE(PTA))      :: ZCHN,ZCEN  !neutral coef. for heat and vapor
+!
+REAL, DIMENSION(SIZE(PTA))      :: ZLV      !latent heat constant
+!
+REAL, DIMENSION(SIZE(PTA))      :: ZTAC,ZDQSDT,ZDTMP,ZDWAT,ZALFAC ! for precipitation impact
+REAL, DIMENSION(SIZE(PTA))      :: ZXLR                           ! vaporisation  heat  at a given temperature
+REAL, DIMENSION(SIZE(PTA))      :: ZCPLW                          ! specific heat for water at a given temperature 
+!
+REAL, DIMENSION(SIZE(PTA))      :: ZUSTAR2  ! square of friction velocity
+!
+REAL, DIMENSION(SIZE(PTA))      :: ZDIRCOSZW! orography slope cosine (=1 on water!)
+REAL, DIMENSION(SIZE(PTA))      :: ZAC      ! Aerodynamical conductance
+!
+!
+INTEGER, DIMENSION(SIZE(PTA))   :: ITERMAX             ! maximum number of iterations
+!
+REAL    :: ZRVSRDM1,ZRDSRV,ZR2 ! thermodynamic constants
+REAL    :: ZBETAGUST           !gustiness factor
+REAL    :: ZZBL                !atm. boundary layer depth (m)
+REAL    :: ZVISW               !m2/s kinematic viscosity of water
+REAL    :: ZS                  !height of rougness length ref
+REAL    :: ZCH10               !transfer coef. at 10m
+!
+INTEGER :: J, JLOOP    !loop indice
+REAL(KIND=JPRB) :: ZHOOK_HANDLE
+!
+!-------------------------------------------------------------------------------
+!
+!       1.     Initializations
+!              ---------------
+!
+!       1.1   Constants and parameters
+!
+IF (LHOOK) CALL DR_HOOK('COARE30_FLUX',0,ZHOOK_HANDLE)
+!
+ZRVSRDM1  = XRV/XRD-1. ! 0.607766
+ZRDSRV    = XRD/XRV    ! 0.62198
+ZR2       = 1.-ZRDSRV  ! pas utilisé dans cette routine
+ZBETAGUST = 1.2        ! value based on TOGA-COARE experiment
+ZZBL      = 600.       ! Set a default value for boundary layer depth
+ZS        = 10.        ! Standard heigth =10m
+ZCH10     = 0.00115
+!
+ZVISW     = 1.E-6
+!
+!       1.2   Array initialization by undefined values
+!
+PSFTH (:)=XUNDEF
+PSFTQ (:)=XUNDEF
+PUSTAR(:)=XUNDEF
+!
+PCD(:) = XUNDEF
+PCDN(:) = XUNDEF
+PCH(:) = XUNDEF
+PCE(:) =XUNDEF
+PRI(:) = XUNDEF
+!
+PRESA(:)=XUNDEF
+!
+!-------------------------------------------------------------------------------
+!       2. INITIAL GUESS FOR THE ITERATIVE METHOD 
+!          -------------------------------------
+!
+!       2.0     Temperature 
+!
+! Set a non-zero value for the temperature gradient
+!
+WHERE((PTA(:)*PEXNS(:)/PEXNA(:)-PSST(:))==0.) 
+      ZTA(:)=PTA(:)-1E-3
+ELSEWHERE
+      ZTA(:)=PTA(:)      
+ENDWHERE
+
+!       2.1     Wind and humidity 
+!
+! Sea surface specific humidity 
+!
+PQSAT(:)=QSAT_SEAWATER(PSST(:),PPS(:))         
+!              
+! Set a minimum value to wind 
+!
+ZVMOD(:) = WIND_THRESHOLD(PVMOD(:),PUREF(:))
+!
+! Specific humidity at saturation at the atm. level 
+!
+ZPA(:) = XP00* (PEXNA(:)**(XCPD/XRD))
+ZQASAT(:) = QSAT(ZTA(:),ZPA(:)) 
+!
+!
+ZO(:)  = 0.0001
+ZWG(:) = 0.
+IF (S%LPWG) ZWG(:) = 0.5
+!
+ZCHARN(:) = 0.011  
+!
+DO J=1,SIZE(PTA)
+  !
+  !      2.2       initial guess
+  !    
+  ZDU(J) = ZVMOD(J)   !wind speed difference with surface current(=0) (m/s)
+                      !initial guess for gustiness factor
+  ZDT(J) = -(ZTA(J)/PEXNA(J)) + (PSST(J)/PEXNS(J)) !potential temperature difference
+  ZDQ(J) = PQSAT(J)-PQA(J)                         !specific humidity difference
+  !
+  ZDUWG(J) = SQRT(ZDU(J)**2+ZWG(J)**2)     !wind speed difference including gustiness ZWG
+  !
+  !      2.3   initialization of neutral coefficients
+  !
+  ZU10(J)  = ZDUWG(J)*LOG(ZS/ZO(J))/LOG(PUREF(J)/ZO(J))
+  ZUSR(J)  = 0.035*ZU10(J)
+  ZVISA(J) = 1.326E-5*(1.+6.542E-3*(ZTA(J)-XTT)+&
+             8.301E-6*(ZTA(J)-XTT)**2-4.84E-9*(ZTA(J)-XTT)**3) !Andrea (1989) CRREL Rep. 89-11
+  ! 
+  ZO10(J) = ZCHARN(J)*ZUSR(J)*ZUSR(J)/XG+0.11*ZVISA(J)/ZUSR(J)
+  ZCD(J)  = (XKARMAN/LOG(PUREF(J)/ZO10(J)))**2  !drag coefficient
+  ZCD10(J)= (XKARMAN/LOG(ZS/ZO10(J)))**2
+  ZCT10(J)= ZCH10/SQRT(ZCD10(J))
+  ZOT10(J)= ZS/EXP(XKARMAN/ZCT10(J))
+  !
+  !-------------------------------------------------------------------------------
+  !             Grachev and Fairall (JAM, 1997)
+  ZCT(J) = XKARMAN/LOG(PZREF(J)/ZOT10(J))      !temperature transfer coefficient
+  ZCC(J) = XKARMAN*ZCT(J)/ZCD(J)               !z/L vs Rib linear coef.
+  !
+  ZRIBCU(J) = -PUREF(J)/(ZZBL*0.004*ZBETAGUST**3) !saturation or plateau Rib
+  !ZRIBU(J) =-XG*PUREF(J)*(ZDT(J)+ZRVSRDM1*(ZTA(J)-XTT)*ZDQ)/&
+  !     &((ZTA(J)-XTT)*ZDUWG(J)**2)
+  ZRIBU(J)  = -XG*PUREF(J)*(ZDT(J)+ZRVSRDM1*ZTA(J)*ZDQ(J))/&
+               (ZTA(J)*ZDUWG(J)**2)  
+  !
+  IF (ZRIBU(J)<0.) THEN
+    ZETU(J) = ZCC(J)*ZRIBU(J)/(1.+ZRIBU(J)/ZRIBCU(J))    !Unstable G and F
+  ELSE
+    ZETU(J) = ZCC(J)*ZRIBU(J)/(1.+27./9.*ZRIBU(J)/ZCC(J))!Stable 
+  ENDIF
+  !
+  ZL10(J) = PUREF(J)/ZETU(J) !MO length
+  !
+ENDDO
+!
+!  First guess M-O stability dependent scaling params. (u*,T*,q*) to estimate ZO and z/L (ZZL)
+ZUSR(:) = ZDUWG(:)*XKARMAN/(LOG(PUREF(:)/ZO10(:))-PSIFCTU(PUREF(:)/ZL10(:)))
+ZTSR(:) = -ZDT(:)*XKARMAN/(LOG(PZREF(:)/ZOT10(:))-PSIFCTT(PZREF(:)/ZL10(:)))
+ZQSR(:) = -ZDQ(:)*XKARMAN/(LOG(PZREF(:)/ZOT10(:))-PSIFCTT(PZREF(:)/ZL10(:)))
+!
+IF (LCPL_WAVE .AND. .NOT. (ANY(S%XCHARN==0.0)) ) THEN
+  ZCHARN(:) = S%XCHARN(:)
+ELSE
+  ZCHARN(:) = 0.011
+END IF
+!
+ZZL(:) = 0.0
+!
+DO J=1,SIZE(PTA)
+  !
+  IF (ZETU(J)>50.) THEN
+    ITERMAX(J) = 1
+  ELSE
+    ITERMAX(J) = 3 !number of iterations
+  ENDIF
+  IF (ZVMOD(J)<=1.) THEN
+    ITERMAX(J) = 10
+  ENDIF
+  !
+  IF (.NOT.LCPL_WAVE) THEN
+    !then modify Charnork for high wind speeds Chris Fairall's data
+    IF (ZDUWG(J)>10.) ZCHARN(J) = 0.011 + (0.018-0.011)*(ZDUWG(J)-10.)/(18-10)
+    IF (ZDUWG(J)>18.) ZCHARN(J) = 0.018
+  END IF
+  !
+  !                3.  ITERATIVE LOOP TO COMPUTE USR, TSR, QSR 
+  !                -------------------------------------------
+  !
+  IF (S%LWAVEWIND .AND. .NOT. LCPL_WAVE) THEN
+    ZHWAVE(J) = 0.018*PVMOD(J)*PVMOD(J)*(1.+0.015*PVMOD(J))
+    ZTWAVE(J) = 0.729*PVMOD(J)
+  ELSE 
+    ZHWAVE(J) = PHS(J)
+    ZTWAVE(J) = PTP(J)
+    ! to avoid the nullity of HS and TP 
+    IF (ZHWAVE(J) .EQ. 0.0) ZHWAVE(J) = 0.018*PVMOD(J)*PVMOD(J)*(1.+0.015*PVMOD(J))
+    IF (ZTWAVE(J) .EQ. 0.0) ZTWAVE(J) = 0.729*PVMOD(J)
+  ENDIF 
+!
+  ZCWAVE(J) = XG*ZTWAVE(J)/(2.*XPI)
+  ZLWAVE(J) = ZTWAVE(J)*ZCWAVE(J)
+  !
+ENDDO
+!
+   
+!
+DO JLOOP=1,MAXVAL(ITERMAX) ! begin of iterative loop
+  !
+  DO J=1,SIZE(PTA)
+    !
+    IF (JLOOP.GT.ITERMAX(J)) CYCLE
+    !
+    IF (S%NGRVWAVES==0) THEN
+      ZO(J) = ZCHARN(J)*ZUSR(J)*ZUSR(J)/XG + 0.11*ZVISA(J)/ZUSR(J) !Smith 1988
+    ELSE IF (S%NGRVWAVES==1) THEN
+      ZO(J) = (50./(2.*XPI))*ZLWAVE(J)*(ZUSR(J)/ZCWAVE(J))**4.5 &
+              + 0.11*ZVISA(J)/ZUSR(J)                       !Oost et al. 2002  
+    ELSE IF (S%NGRVWAVES==2) THEN
+      ZO(J) = 1200.*ZHWAVE(J)*(ZHWAVE(J)/ZLWAVE(J))**4.5 &
+              + 0.11*ZVISA(J)/ZUSR(J)                       !Taulor and Yelland 2001  
+    ENDIF
+    !
+    ZRR(J) = ZO(J)*ZUSR(J)/ZVISA(J)
+    ZOQ(J) = MIN(1.15E-4 , 5.5E-5/ZRR(J)**0.6)
+    ZOT(J) = ZOQ(J)
+    !
+    ZZL(J) = XKARMAN * XG * PUREF(J) * &
+              ( ZTSR(J)*(1.+ZRVSRDM1*PQA(J)) + ZRVSRDM1*ZTA(J)*ZQSR(J) ) / &
+              ( ZTA(J)*ZUSR(J)*ZUSR(J)*(1.+ZRVSRDM1*PQA(J)) )  
+    ZZTL(J)= ZZL(J)*PZREF(J)/PUREF(J)  ! for T 
+!    ZZQL(J)=ZZL(J)*PZREF(J)/PUREF(J)  ! for Q
+  ENDDO
+  !
+  ZPUZ(:) = PSIFCTU(ZZL(:))     
+  ZPTZ(:) = PSIFCTT(ZZTL(:))
+  !
+  DO J=1,SIZE(PTA)
+    !
+    ! ZPQZ(J)=PSIFCTT(ZZQL(J))    
+    ZPQZ(J) = ZPTZ(J)
+    !
+    !             3.1 scale parameters
+    !
+    ZUSR(J) = ZDUWG(J)*XKARMAN/(LOG(PUREF(J)/ZO(J)) -ZPUZ(J))
+    ZTSR(J) = -ZDT(J)  *XKARMAN/(LOG(PZREF(J)/ZOT(J))-ZPTZ(J))
+    ZQSR(J) = -ZDQ(J)  *XKARMAN/(LOG(PZREF(J)/ZOQ(J))-ZPQZ(J))
+    !
+    !             3.2 Gustiness factor (ZWG)
+    !
+    IF(S%LPWG) THEN
+      ZBF(J) = -XG/ZTA(J)*ZUSR(J)*(ZTSR(J)+ZRVSRDM1*ZTA(J)*ZQSR(J))
+      IF (ZBF(J)>0.) THEN
+        ZWG(J) = ZBETAGUST*(ZBF(J)*ZZBL)**(1./3.)
+      ELSE
+        ZWG(J) = 0.2
+      ENDIF
+    ENDIF  
+    ZDUWG(J) = SQRT(ZVMOD(J)**2 + ZWG(J)**2)
+    !
+  ENDDO
+  !
+ENDDO
+!-------------------------------------------------------------------------------
+!
+!            4.  COMPUTE transfer coefficients PCD, PCH, ZCE and SURFACE FLUXES
+!                --------------------------------------------------------------
+!
+ZTAU(:) = XUNDEF
+ZHF(:)  = XUNDEF
+ZEF(:)  = XUNDEF
+!
+ZWBAR(:) = 0.
+ZTAUR(:) = 0.
+ZRF(:)   = 0.
+!
+DO J=1,SIZE(PTA)
+  !
+  !
+  !            4. transfert coefficients PCD, PCH and PCE 
+  !                 and neutral PCDN, ZCHN, ZCEN 
+  !
+  PCD(J) = (ZUSR(J)/ZDUWG(J))**2.
+  PCH(J) = ZUSR(J)*ZTSR(J)/(ZDUWG(J)*(ZTA(J)*PEXNS(J)/PEXNA(J)-PSST(J)))
+  PCE(J) = ZUSR(J)*ZQSR(J)/(ZDUWG(J)*(PQA(J)-PQSAT(J)))
+  !
+  PCDN(J) = (XKARMAN/LOG(ZS/ZO(J)))**2.
+  ZCHN(J) = (XKARMAN/LOG(ZS/ZO(J)))*(XKARMAN/LOG(ZS/ZOT(J)))
+  ZCEN(J) = (XKARMAN/LOG(ZS/ZO(J)))*(XKARMAN/LOG(ZS/ZOQ(J)))
+  !
+  ZLV(J) = XLVTT + (XCPV-XCL)*(PSST(J)-XTT)
+  !
+  !            4. 2 surface fluxes 
+  !
+  IF (ABS(PCDN(J))>1.E-2) THEN   !!!! secure COARE3.0 CODE 
+    write(*,*) 'pb PCDN in COARE30: ',PCDN(J)
+    write(*,*) 'point: ',J,"/",SIZE(PTA)
+    write(*,*) 'roughness: ', ZO(J)
+    write(*,*) 'ustar: ',ZUSR(J)
+    write(*,*) 'wind: ',ZDUWG(J)
+    CALL ABOR1_SFX('COARE30: PCDN too large -> no convergence')
+  ELSE
+    ZTSR(J) = -ZTSR(J)
+    ZQSR(J) = -ZQSR(J)
+    ZTAU(J) = -PRHOA(J)*ZUSR(J)*ZUSR(J)*ZVMOD(J)/ZDUWG(J)
+    ZHF(J)  =  PRHOA(J)*XCPD*ZUSR(J)*ZTSR(J)
+    ZEF(J)  =  PRHOA(J)*ZLV(J)*ZUSR(J)*ZQSR(J)
+    !    
+    !           4.3 Contributions to surface  fluxes due to rainfall
+    !
+    ! SB: a priori, le facteur ZRDSRV=XRD/XRV est introduit pour
+    !     adapter la formule de Clausius-Clapeyron (pour l'air
+    !     sec) au cas humide.
+    IF (S%LPRECIP) THEN
+      ! 
+      ! heat surface  fluxes
+      !
+      ZTAC(J)  = ZTA(J)-XTT
+      !
+      ZXLR(J)  = XLVTT + (XCPV-XCL)* ZTAC(J)                            ! latent heat of rain vaporization
+      ZDQSDT(J)= ZQASAT(J) * ZXLR(J) / (XRD*ZTA(J)**2)                  ! Clausius-Clapeyron relation
+      ZDTMP(J) = (1.0 + 3.309e-3*ZTAC(J) -1.44e-6*ZTAC(J)*ZTAC(J)) * &  !heat diffusivity
+                  0.02411 / (PRHOA(J)*XCPD)
+      !
+      ZDWAT(J) = 2.11e-5 * (XP00/ZPA(J)) * (ZTA(J)/XTT)**1.94           ! water vapour diffusivity from eq (13.3)
+      !                                                                 ! of Pruppacher and Klett (1978)      
+      ZALFAC(J)= 1.0 / (1.0 + &                                         ! Eq.11 in GoF95
+                   ZRDSRV*ZDQSDT(J)*ZXLR(J)*ZDWAT(J)/(ZDTMP(J)*XCPD))   ! ZALFAC=wet-bulb factor (sans dim)     
+      ZCPLW(J) = 4224.8482 + ZTAC(J) * &
+                              ( -4.707 + ZTAC(J) * &
+                                (0.08499 + ZTAC(J) * &
+                                  (1.2826e-3 + ZTAC(J) * &
+                                    (4.7884e-5 - 2.0027e-6* ZTAC(J))))) ! specific heat  
+      !       
+      ZRF(J)   = PRAIN(J) * ZCPLW(J) * ZALFAC(J) * &                    !Eq.12 in GoF95 !SIGNE?
+                   (PSST(J) - ZTA(J) + (PQSAT(J)-PQA(J))*ZXLR(J)/XCPD )
+      !
+      ! Momentum flux due to rainfall  
+      !
+      ZTAUR(J)=-0.85*(PRAIN(J) *ZVMOD(J)) !pp3752 in FBR96
+      !
+    ENDIF
+    !
+    !             4.4   Webb correction to latent heat flux
+    ! 
+    ZWBAR(J)=- (1./ZRDSRV)*ZUSR(J)*ZQSR(J) / (1.0+(1./ZRDSRV)*PQA(J)) &
+               - ZUSR(J)*ZTSR(J)/ZTA(J)                        ! Eq.21*rhoa in FBR96    
+    !
+    !             4.5   friction velocity which contains correction du to rain            
+    !
+    ZUSTAR2(J)= - (ZTAU(J) + ZTAUR(J)) / PRHOA(J)
+    PUSTAR(J) =  SQRT(ZUSTAR2(J))
+    !
+    !             4.6   Total surface fluxes
+    !           
+    PSFTH (J) =  ZHF(J) + ZRF(J)
+    PSFTQ (J) =  ZEF(J) / ZLV(J)
+    ! 
+  ENDIF
+ENDDO                      
+!-------------------------------------------------------------------------------
+!
+!       5.  FINAL STEP : TOTAL SURFACE FLUXES AND DERIVED DIAGNOSTICS 
+!           -----------
+!       5.1    Richardson number
+!             
+!
+ZDIRCOSZW(:) = 1.
+ CALL SURFACE_RI(PSST,PQSAT,PEXNS,PEXNA,ZTA,ZQASAT,&
+                PZREF,PUREF,ZDIRCOSZW,PVMOD,PRI   )  
+!
+!       5.2     Aerodynamical conductance and resistance
+!             
+ZAC(:) = PCH(:)*ZVMOD(:)
+PRESA(:) = 1. / MAX(ZAC(:),XSURF_EPSILON)
+!
+!       5.3 Z0 and Z0H over sea
+!
+PZ0SEA(:) = MAX(MIN(ZO(:),0.05),10E-6)
+!
+PZ0HSEA(:) = PZ0SEA(:)
+!
+IF (LHOOK) CALL DR_HOOK('COARE30_FLUX',1,ZHOOK_HANDLE)
+!
+!-------------------------------------------------------------------------------
+!
+END SUBROUTINE COARE30_FLUX
diff --git a/src/ARCH_SRC/CPL_WAVE/SURFEX/coare30_seaflux.F90 b/src/ARCH_SRC/CPL_WAVE/SURFEX/coare30_seaflux.F90
new file mode 100644
index 0000000000000000000000000000000000000000..2241194321f710371ea128caafa038fa06dceae8
--- /dev/null
+++ b/src/ARCH_SRC/CPL_WAVE/SURFEX/coare30_seaflux.F90
@@ -0,0 +1,270 @@
+!SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence
+!SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!SFX_LIC for details. version 1.
+!     #########
+    SUBROUTINE COARE30_SEAFLUX (S, &
+                                PMASK,KSIZE_WATER,KSIZE_ICE,     &
+                                PTA,PEXNA,PRHOA,PSST,PEXNS,PQA,        & 
+                                PRAIN,PSNOW,PVMOD,PZREF,PUREF,PPS,     &
+                                PQSAT,PSFTH,PSFTQ,PUSTAR,  &
+                                PCD,PCDN,PCH,PCE,PRI,PRESA,PZ0HSEA,PHS,PTP)
+!     ##################################################################
+!
+!
+!!****  *COARE30_SEAFLUX*  
+!!
+!!    PURPOSE
+!!    -------
+!     
+!      Calculate the sea surface fluxes with modified bulk algorithm COARE:  
+!
+!      Calculates the surface fluxes of heat, moisture, and momentum over
+!      sea surface with the simplified COARE 3.0 bulk algorithm from Fairall et al 
+!      2003
+!   
+!      based on water_flux computation for sea ice
+!     
+!!**  METHOD
+!!    ------
+!
+!!    EXTERNAL
+!!    --------
+!!
+!!    IMPLICIT ARGUMENTS
+!!    ------------------ 
+!!      
+!!    REFERENCE
+!!    ---------
+!!     
+!!    AUTHOR
+!!    ------
+!!     C. Lebeaupin  *Météo-France* 
+!!
+!!    MODIFICATIONS
+!!    -------------
+!!      Original     18/03/2005
+!!      B. Decharme     04/2013 : Pack only input variables
+!!      S. Senesi       01/2014 : When handling sea ice cover, compute open sea flux, 
+!!                                and only where ice cover < 1.
+!!      M.N. Bouin     03/2014 possibility of wave parameters from external source
+!-------------------------------------------------------------------------------
+!
+!*       0.     DECLARATIONS
+!               ------------
+!
+!
+!
+USE MODD_SEAFLUX_n, ONLY : SEAFLUX_t
+!
+USE MODD_SURF_PAR,   ONLY : XUNDEF
+!
+USE MODI_ICE_SEA_FLUX
+USE MODI_COARE30_FLUX
+!
+USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
+USE PARKIND1  ,ONLY : JPRB
+!
+IMPLICIT NONE
+!
+!*      0.1    declarations of arguments
+!
+!
+TYPE(SEAFLUX_t), INTENT(INOUT) :: S
+!
+REAL, DIMENSION(:), INTENT(IN)   :: PMASK        ! Either a mask positive for open sea, or a seaice fraction
+INTEGER           , INTENT(IN)   :: KSIZE_WATER  ! number of points with some sea water 
+INTEGER           , INTENT(IN)   :: KSIZE_ICE    ! number of points with some sea ice
+!                                    
+REAL, DIMENSION(:), INTENT(IN)    :: PTA   ! air temperature at atm. level (K)
+REAL, DIMENSION(:), INTENT(IN)    :: PQA   ! air humidity at atm. level (kg/kg)
+REAL, DIMENSION(:), INTENT(IN)    :: PEXNA ! Exner function at atm. level
+REAL, DIMENSION(:), INTENT(IN)    :: PRHOA ! air density at atm. level
+REAL, DIMENSION(:), INTENT(IN)    :: PVMOD ! module of wind at atm. wind level (m/s)
+REAL, DIMENSION(:), INTENT(IN)    :: PZREF ! atm. level for temp. and humidity (m)
+REAL, DIMENSION(:), INTENT(IN)    :: PUREF ! atm. level for wind (m)
+REAL, DIMENSION(:), INTENT(IN)    :: PSST  ! Sea Surface Temperature (K)
+REAL, DIMENSION(:), INTENT(IN)    :: PHS   ! wave significant height
+REAL, DIMENSION(:), INTENT(IN)    :: PTP   ! Wave peak period
+REAL, DIMENSION(:), INTENT(IN)    :: PEXNS ! Exner function at sea surface
+REAL, DIMENSION(:), INTENT(IN)    :: PPS   ! air pressure at sea surface (Pa)
+REAL, DIMENSION(:), INTENT(IN)    :: PRAIN ! precipitation rate (kg/s/m2)
+REAL, DIMENSION(:), INTENT(IN)    :: PSNOW ! snow rate (kg/s/m2)
+!                                                                                 
+!  surface fluxes : latent heat, sensible heat, friction fluxes
+REAL, DIMENSION(:), INTENT(OUT)      :: PSFTH ! heat flux (W/m2)
+REAL, DIMENSION(:), INTENT(OUT)      :: PSFTQ ! water flux (kg/m2/s)
+REAL, DIMENSION(:), INTENT(OUT)      :: PUSTAR! friction velocity (m/s)
+!
+! diagnostics
+REAL, DIMENSION(:), INTENT(OUT)      :: PQSAT ! humidity at saturation
+REAL, DIMENSION(:), INTENT(OUT)      :: PCD   ! heat drag coefficient
+REAL, DIMENSION(:), INTENT(OUT)      :: PCDN  ! momentum drag coefficient
+REAL, DIMENSION(:), INTENT(OUT)      :: PCH   ! neutral momentum drag coefficient
+REAL, DIMENSION(:), INTENT(OUT)      :: PCE   !transfer coef. for latent heat flux
+REAL, DIMENSION(:), INTENT(OUT)      :: PRI   ! Richardson number
+REAL, DIMENSION(:), INTENT(OUT)      :: PRESA ! aerodynamical resistance
+REAL, DIMENSION(:), INTENT(OUT)      :: PZ0HSEA ! heat roughness length
+!
+!*      0.2    declarations of local variables
+!
+INTEGER, DIMENSION(KSIZE_WATER) :: IR_WATER
+INTEGER, DIMENSION(KSIZE_ICE)   :: IR_ICE
+INTEGER                         :: J1,J2,JJ
+REAL(KIND=JPRB) :: ZHOOK_HANDLE
+!
+!-------------------------------------------------------------------------------
+!
+!       1.     Create Masks for ice and water sea
+!              ------------------------------------
+IF (LHOOK) CALL DR_HOOK('MODI_COARE30_SEAFLUX:COARE30_SEAFLUX',0,ZHOOK_HANDLE)
+!
+IR_WATER(:)=0
+IR_ICE(:)=0
+J1=0
+J2=0
+!
+IF (S%LHANDLE_SIC) THEN 
+   ! Must compute open sea fluxes even over fully ice-covered sea, which may melt partly
+   DO JJ=1,SIZE(PSST(:))
+      IR_WATER(JJ)= JJ
+   END DO
+   ! Do not compute on sea-ice (done in coupling_iceflux)
+ELSE
+   ! PMASK = XSST -XTTS
+   DO JJ=1,SIZE(PSST(:))
+      IF (PMASK(JJ) >=0.0 ) THEN
+         J1 = J1 + 1
+         IR_WATER(J1)= JJ
+      ELSE
+         J2 = J2 + 1
+         IR_ICE(J2)= JJ
+      ENDIF
+   END DO
+ENDIF
+!
+!-------------------------------------------------------------------------------
+!
+!       2.      water sea : call to COARE30_FLUX
+!              ------------------------------------------------
+!
+IF (KSIZE_WATER > 0 ) CALL TREAT_SURF(IR_WATER,'W')
+!
+!-------------------------------------------------------------------------------
+!
+!       3.      sea ice : call to ICE_SEA_FLUX
+!              ------------------------------------
+!
+IF ( (KSIZE_ICE > 0 ) .AND. (.NOT. S%LHANDLE_SIC) ) CALL TREAT_SURF(IR_ICE,'I')
+!
+!
+IF (LHOOK) CALL DR_HOOK('MODI_COARE30_SEAFLUX:COARE30_SEAFLUX',1,ZHOOK_HANDLE)
+!-------------------------------------------------------------------------------
+!
+CONTAINS
+!
+SUBROUTINE TREAT_SURF(KMASK,YTYPE)
+!
+INTEGER, INTENT(IN), DIMENSION(:) :: KMASK
+ CHARACTER(LEN=1), INTENT(IN) :: YTYPE
+!
+REAL, DIMENSION(SIZE(KMASK))      :: ZW_TA   ! air temperature at atm. level (K)
+REAL, DIMENSION(SIZE(KMASK))      :: ZW_QA   ! air humidity at atm. level (kg/kg)
+REAL, DIMENSION(SIZE(KMASK))      :: ZW_EXNA ! Exner function at atm. level
+REAL, DIMENSION(SIZE(KMASK))      :: ZW_RHOA ! air density at atm. level
+REAL, DIMENSION(SIZE(KMASK))      :: ZW_VMOD ! module of wind at atm. wind level (m/s)
+REAL, DIMENSION(SIZE(KMASK))      :: ZW_ZREF ! atm. level for temp. and humidity (m)
+REAL, DIMENSION(SIZE(KMASK))      :: ZW_UREF ! atm. level for wind (m)
+REAL, DIMENSION(SIZE(KMASK))      :: ZW_SST  ! Sea Surface Temperature (K)
+REAL, DIMENSION(SIZE(KMASK))      :: ZW_HS   ! wave significant height
+REAL, DIMENSION(SIZE(KMASK))      :: ZW_TP   ! wave peak period
+REAL, DIMENSION(SIZE(KMASK))      :: ZW_EXNS ! Exner function at sea surface
+REAL, DIMENSION(SIZE(KMASK))      :: ZW_PS   ! air pressure at sea surface (Pa)
+REAL, DIMENSION(SIZE(KMASK))      :: ZW_RAIN !precipitation rate (kg/s/m2)
+REAL, DIMENSION(SIZE(KMASK))      :: ZW_SNOW !snow rate (kg/s/m2)
+!
+REAL, DIMENSION(SIZE(KMASK))      :: ZW_Z0SEA! roughness length over the ocean
+!                                                                                 
+!  surface fluxes : latent heat, sensible heat, friction fluxes
+REAL, DIMENSION(SIZE(KMASK))      :: ZW_SFTH ! heat flux (W/m2)
+REAL, DIMENSION(SIZE(KMASK))      :: ZW_SFTQ ! water flux (kg/m2/s)
+REAL, DIMENSION(SIZE(KMASK))      :: ZW_USTAR! friction velocity (m/s)
+!
+! diagnostics
+REAL, DIMENSION(SIZE(KMASK))      :: ZW_QSAT ! humidity at saturation
+REAL, DIMENSION(SIZE(KMASK))      :: ZW_CD   ! heat drag coefficient
+REAL, DIMENSION(SIZE(KMASK))      :: ZW_CDN  ! momentum drag coefficient
+REAL, DIMENSION(SIZE(KMASK))      :: ZW_CH   ! neutral momentum drag coefficient
+REAL, DIMENSION(SIZE(KMASK))      :: ZW_CE   !transfer coef. for latent heat flux
+REAL, DIMENSION(SIZE(KMASK))      :: ZW_RI   ! Richardson number
+REAL, DIMENSION(SIZE(KMASK))      :: ZW_RESA ! aerodynamical resistance
+REAL, DIMENSION(SIZE(KMASK))      :: ZW_Z0HSEA ! heat roughness length
+!
+REAL(KIND=JPRB) :: ZHOOK_HANDLE
+!
+IF (LHOOK) CALL DR_HOOK('COARE30_SEAFLUX:TREAT_SURF',0,ZHOOK_HANDLE)
+!
+DO JJ=1, SIZE(KMASK)
+  ZW_TA(JJ)   = PTA(KMASK(JJ))
+  ZW_QA(JJ)   = PQA(KMASK(JJ))
+  ZW_EXNA(JJ) = PEXNA(KMASK(JJ))
+  ZW_RHOA(JJ) = PRHOA(KMASK(JJ))
+  ZW_VMOD(JJ) = PVMOD(KMASK(JJ))
+  ZW_ZREF(JJ) = PZREF(KMASK(JJ)) 
+  ZW_UREF(JJ) = PUREF(KMASK(JJ))
+  ZW_SST(JJ)  = PSST(KMASK(JJ))
+  ZW_TP(JJ)   = PTP(KMASK(JJ))
+  ZW_HS(JJ)   = PHS(KMASK(JJ))
+  ZW_EXNS(JJ) = PEXNS(KMASK(JJ)) 
+  ZW_PS(JJ)   = PPS(KMASK(JJ))
+  ZW_RAIN(JJ) = PRAIN(KMASK(JJ))
+  ZW_SNOW(JJ) = PSNOW(KMASK(JJ))
+  ZW_Z0SEA(JJ)= S%XZ0(KMASK(JJ))
+ENDDO
+!  
+ZW_SFTH(:)   = XUNDEF
+ZW_SFTQ(:)   = XUNDEF
+ZW_USTAR(:)  = XUNDEF
+ZW_QSAT(:)   = XUNDEF
+ZW_CD(:)     = XUNDEF
+ZW_CDN(:)    = XUNDEF
+ZW_CH(:)     = XUNDEF
+ZW_CE(:)     = XUNDEF
+ZW_RI(:)     = XUNDEF
+ZW_RESA(:)   = XUNDEF
+ZW_Z0HSEA(:) = XUNDEF
+!
+IF (YTYPE=='W') THEN
+  !
+  CALL COARE30_FLUX(S, &
+                    ZW_Z0SEA,ZW_TA,ZW_EXNA,ZW_RHOA,ZW_SST,ZW_EXNS,&
+        ZW_QA,ZW_VMOD,ZW_ZREF,ZW_UREF,ZW_PS,ZW_QSAT,ZW_SFTH,ZW_SFTQ,ZW_USTAR,&
+        ZW_CD,ZW_CDN,ZW_CH,ZW_CE,ZW_RI,ZW_RESA,ZW_RAIN,ZW_Z0HSEA,ZW_HS,ZW_TP)   
+  !
+ELSEIF ( (YTYPE=='I') .AND. (.NOT. S%LHANDLE_SIC)) THEN
+  !
+  CALL ICE_SEA_FLUX(ZW_Z0SEA,ZW_TA,ZW_EXNA,ZW_RHOA,ZW_SST,ZW_EXNS,ZW_QA,ZW_RAIN,ZW_SNOW,  &
+         ZW_VMOD,ZW_ZREF,ZW_UREF,ZW_PS,ZW_QSAT,ZW_SFTH,ZW_SFTQ,ZW_USTAR,ZW_CD, &
+         ZW_CDN,ZW_CH,ZW_RI,ZW_RESA,ZW_Z0HSEA)  
+  !
+ENDIF
+!
+DO JJ=1, SIZE(KMASK)
+   S%XZ0(KMASK(JJ))  =  ZW_Z0SEA(JJ)
+   PSFTH(KMASK(JJ))   =  ZW_SFTH(JJ) 
+   PSFTQ(KMASK(JJ))   =  ZW_SFTQ(JJ) 
+   PUSTAR(KMASK(JJ))  =  ZW_USTAR(JJ)
+   PQSAT(KMASK(JJ))   =  ZW_QSAT(JJ)
+   PCD(KMASK(JJ))     =  ZW_CD(JJ) 
+   PCDN(KMASK(JJ))    =  ZW_CDN(JJ) 
+   PCH(KMASK(JJ))     =  ZW_CH(JJ)
+   PCE(KMASK(JJ))     =  ZW_CE(JJ)
+   PRI(KMASK(JJ))     =  ZW_RI(JJ) 
+   PRESA(KMASK(JJ))   =  ZW_RESA(JJ) 
+   PZ0HSEA(KMASK(JJ)) = ZW_Z0HSEA(JJ) 
+END DO
+IF (LHOOK) CALL DR_HOOK('COARE30_SEAFLUX:TREAT_SURF',1,ZHOOK_HANDLE)
+!
+END SUBROUTINE TREAT_SURF
+! 
+END SUBROUTINE COARE30_SEAFLUX
diff --git a/src/ARCH_SRC/CPL_WAVE/SURFEX/coupling_seafluxn.F90 b/src/ARCH_SRC/CPL_WAVE/SURFEX/coupling_seafluxn.F90
new file mode 100644
index 0000000000000000000000000000000000000000..40fc1d1905ff83fcc55ed7d9059127a6f2c7bfea
--- /dev/null
+++ b/src/ARCH_SRC/CPL_WAVE/SURFEX/coupling_seafluxn.F90
@@ -0,0 +1,782 @@
+!SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence
+!SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!SFX_LIC for details. version 1.
+!     ###############################################################################
+SUBROUTINE COUPLING_SEAFLUX_n (SM, DST, SLT, &
+                               HPROGRAM, HCOUPLING, PTIMEC,                                   &
+                 PTSTEP, KYEAR, KMONTH, KDAY, PTIME, KI, KSV, KSW, PTSUN, PZENITH, PZENITH2, &
+                 PAZIM, PZREF, PUREF, PU, PV, PQA, PTA, PRHOA, PSV, PCO2, HSV,          &
+                 PRAIN, PSNOW, PLW, PDIR_SW, PSCA_SW, PSW_BANDS, PPS, PPA,                   &
+                 PSFTQ, PSFTH, PSFTS, PSFCO2, PSFU, PSFV,                                    &
+                 PTRAD, PDIR_ALB, PSCA_ALB, PEMIS, PTSURF, PZ0, PZ0H, PQSURF,                &
+                 PPEW_A_COEF, PPEW_B_COEF,                                                   &
+                 PPET_A_COEF, PPEQ_A_COEF, PPET_B_COEF, PPEQ_B_COEF,                         &
+                 HTEST                                                                       )  
+!     ###############################################################################
+!
+!!****  *COUPLING_SEAFLUX_n * - Driver of the WATER_FLUX scheme for sea   
+!!
+!!    PURPOSE
+!!    -------
+!
+!!**  METHOD
+!!    ------
+!!
+!!    REFERENCE
+!!    ---------
+!!      
+!!
+!!    AUTHOR
+!!    ------
+!!     V. Masson 
+!!
+!!    MODIFICATIONS
+!!    -------------
+!!      Original    01/2004
+!!      Modified    01/2006 : sea flux parameterization.
+!!      Modified    09/2006 : P. Tulet Introduce Sea salt aerosol Emission/Deposition
+!!      Modified    03/2009 : B. Decharme SST could change during a run => ALB and EMIS 
+!!      Modified    05/2009 : V. Masson : implicitation of momentum fluxes
+!!      Modified    09/2009 : B. Decharme Radiative properties at time t+1
+!!      Modified    01/2010 : B. Decharme Add XTTS
+!!      Modified    09/2012 : B. Decharme New wind implicitation
+!!      Modified    10/2012 : P. Le Moigne CMO1D update
+!!      Modified    04/2013 : P. Le Moigne Wind implicitation and SST update displaced
+!!      Modified    04/2013 : B. Decharme new coupling variables
+!!      Modified    01/2014 : S. Senesi : handle sea-ice cover, sea-ice model interface, 
+!!                               and apply to Gelato
+!!      Modified    01/2014 : S. Belamari Remove MODE_THERMOS and XLVTT
+!!      Modified    05/2014 : S. Belamari New ECUME : Include salinity & atm. pressure impact 
+!!      Modified    01/2015 : R. Séférian interactive ocaen surface albedo
+!!      Modified    03/2014 : M.N. Bouin possibility of wave parameters from external source
+!!      Modified    11/2014 : J. Pianezze : add currents for wave coupling
+!!                                       
+!!---------------------------------------------------------------------
+!
+!
+!
+USE MODD_SURFEX_n, ONLY : SEAFLUX_MODEL_t
+!
+USE MODD_DST_n, ONLY : DST_t
+USE MODD_SLT_n, ONLY : SLT_t
+!
+USE MODD_REPROD_OPER, ONLY : CIMPLICIT_WIND
+!
+USE MODD_CSTS,       ONLY : XRD, XCPD, XP00, XTT, XTTS, XTTSI, XDAY
+USE MODD_SURF_PAR,   ONLY : XUNDEF
+USE MODD_SFX_OASIS,  ONLY : LCPL_WAVE, LCPL_SEA, LCPL_SEAICE
+USE MODD_WATER_PAR,  ONLY : XEMISWAT, XEMISWATICE
+!
+USE MODD_WATER_PAR, ONLY : XALBSEAICE
+!
+!
+USE MODI_WATER_FLUX
+USE MODI_MR98
+USE MODI_ECUME_SEAFLUX
+USE MODI_COARE30_SEAFLUX
+USE MODI_ADD_FORECAST_TO_DATE_SURF
+USE MODI_MOD1D_n
+USE MODI_DIAG_INLINE_SEAFLUX_n
+USE MODI_CH_AER_DEP
+USE MODI_CH_DEP_WATER
+USE MODI_DSLT_DEP
+USE MODI_SST_UPDATE
+USE MODI_INTERPOL_SST_MTH
+USE MODI_UPDATE_RAD_SEA
+!
+USE MODE_DSLT_SURF
+USE MODD_DST_SURF
+USE MODD_SLT_SURF
+! 
+USE MODD_OCEAN_GRID,   ONLY : NOCKMIN
+!
+USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
+USE PARKIND1  ,ONLY : JPRB
+!
+USE MODI_ABOR1_SFX
+!
+USE MODI_COUPLING_ICEFLUX_n
+USE MODI_SEAICE_GELATO1D_n
+!
+USE MODI_COUPLING_SLT_n
+!
+IMPLICIT NONE
+!
+!*      0.1    declarations of arguments
+!
+!
+TYPE(SEAFLUX_MODEL_t), INTENT(INOUT) :: SM
+TYPE(DST_t), INTENT(INOUT) :: DST
+TYPE(SLT_t), INTENT(INOUT) :: SLT
+!
+ CHARACTER(LEN=6),    INTENT(IN)  :: HPROGRAM  ! program calling surf. schemes
+ CHARACTER(LEN=1),    INTENT(IN)  :: HCOUPLING ! type of coupling
+                                              ! 'E' : explicit
+                                              ! 'I' : implicit
+REAL,                INTENT(IN)  :: PTIMEC    ! current duration since start of the run (s)
+INTEGER,             INTENT(IN)  :: KYEAR     ! current year (UTC)
+INTEGER,             INTENT(IN)  :: KMONTH    ! current month (UTC)
+INTEGER,             INTENT(IN)  :: KDAY      ! current day (UTC)
+REAL,                INTENT(IN)  :: PTIME     ! current time since midnight (UTC, s)
+INTEGER,             INTENT(IN)  :: KI        ! number of points
+INTEGER,             INTENT(IN)  :: KSV       ! number of scalars
+INTEGER,             INTENT(IN)  :: KSW       ! number of short-wave spectral bands
+REAL, DIMENSION(KI), INTENT(IN)  :: PTSUN     ! solar time                    (s from midnight)
+REAL,                INTENT(IN)  :: PTSTEP    ! atmospheric time-step                 (s)
+REAL, DIMENSION(KI), INTENT(IN)  :: PZREF     ! height of T,q forcing                 (m)
+REAL, DIMENSION(KI), INTENT(IN)  :: PUREF     ! height of wind forcing                (m)
+!
+REAL, DIMENSION(KI), INTENT(IN)  :: PTA       ! air temperature forcing               (K)
+REAL, DIMENSION(KI), INTENT(IN)  :: PQA       ! air humidity forcing                  (kg/m3)
+REAL, DIMENSION(KI), INTENT(IN)  :: PRHOA     ! air density                           (kg/m3)
+REAL, DIMENSION(KI,KSV),INTENT(IN) :: PSV     ! scalar variables
+!                                             ! chemistry:   first char. in HSV: '#'  (molecule/m3)
+!                                             !
+ CHARACTER(LEN=6), DIMENSION(KSV),INTENT(IN):: HSV  ! name of all scalar variables
+REAL, DIMENSION(KI), INTENT(IN)  :: PU        ! zonal wind                            (m/s)
+REAL, DIMENSION(KI), INTENT(IN)  :: PV        ! meridian wind                         (m/s)
+REAL, DIMENSION(KI,KSW),INTENT(IN) :: PDIR_SW ! direct  solar radiation (on horizontal surf.)
+!                                             !                                       (W/m2)
+REAL, DIMENSION(KI,KSW),INTENT(IN) :: PSCA_SW ! diffuse solar radiation (on horizontal surf.)
+!                                             !                                       (W/m2)
+REAL, DIMENSION(KSW),INTENT(IN)  :: PSW_BANDS ! mean wavelength of each shortwave band (m)
+REAL, DIMENSION(KI), INTENT(IN)  :: PZENITH   ! zenithal angle at t  (radian from the vertical)
+REAL, DIMENSION(KI), INTENT(IN)  :: PZENITH2  ! zenithal angle at t+1(radian from the vertical)
+REAL, DIMENSION(KI), INTENT(IN)  :: PAZIM     ! azimuthal angle      (radian from North, clockwise)
+REAL, DIMENSION(KI), INTENT(IN)  :: PLW       ! longwave radiation (on horizontal surf.)
+!                                             !                                       (W/m2)
+REAL, DIMENSION(KI), INTENT(IN)  :: PPS       ! pressure at atmospheric model surface (Pa)
+REAL, DIMENSION(KI), INTENT(IN)  :: PPA       ! pressure at forcing level             (Pa)
+REAL, DIMENSION(KI), INTENT(IN)  :: PCO2      ! CO2 concentration in the air          (kg/m3)
+REAL, DIMENSION(KI), INTENT(IN)  :: PSNOW     ! snow precipitation                    (kg/m2/s)
+REAL, DIMENSION(KI), INTENT(IN)  :: PRAIN     ! liquid precipitation                  (kg/m2/s)
+!
+REAL, DIMENSION(KI), INTENT(OUT) :: PSFTH     ! flux of heat                          (W/m2)
+REAL, DIMENSION(KI), INTENT(OUT) :: PSFTQ     ! flux of water vapor                   (kg/m2/s)
+REAL, DIMENSION(KI), INTENT(OUT) :: PSFU      ! zonal momentum flux                   (Pa)
+REAL, DIMENSION(KI), INTENT(OUT) :: PSFV      ! meridian momentum flux                (Pa)
+REAL, DIMENSION(KI), INTENT(OUT) :: PSFCO2    ! flux of CO2                           (m/s*kg_CO2/kg_air)
+REAL, DIMENSION(KI,KSV),INTENT(OUT):: PSFTS   ! flux of scalar var.                   (kg/m2/s)
+!
+REAL, DIMENSION(KI), INTENT(OUT) :: PTRAD     ! radiative temperature                 (K)
+REAL, DIMENSION(KI,KSW),INTENT(OUT):: PDIR_ALB! direct albedo for each spectral band  (-)
+REAL, DIMENSION(KI,KSW),INTENT(OUT):: PSCA_ALB! diffuse albedo for each spectral band (-)
+REAL, DIMENSION(KI), INTENT(OUT) :: PEMIS     ! emissivity                            (-)
+!
+REAL, DIMENSION(KI), INTENT(OUT) :: PTSURF    ! surface effective temperature         (K)
+REAL, DIMENSION(KI), INTENT(OUT) :: PZ0       ! roughness length for momentum         (m)
+REAL, DIMENSION(KI), INTENT(OUT) :: PZ0H      ! roughness length for heat             (m)
+REAL, DIMENSION(KI), INTENT(OUT) :: PQSURF    ! specific humidity at surface          (kg/kg)
+!
+REAL, DIMENSION(KI), INTENT(IN) :: PPEW_A_COEF! implicit coefficients   (m2s/kg)
+REAL, DIMENSION(KI), INTENT(IN) :: PPEW_B_COEF! needed if HCOUPLING='I' (m/s)
+REAL, DIMENSION(KI), INTENT(IN) :: PPET_A_COEF
+REAL, DIMENSION(KI), INTENT(IN) :: PPEQ_A_COEF
+REAL, DIMENSION(KI), INTENT(IN) :: PPET_B_COEF
+REAL, DIMENSION(KI), INTENT(IN) :: PPEQ_B_COEF
+ CHARACTER(LEN=2),    INTENT(IN) :: HTEST ! must be equal to 'OK'
+!
+!*      0.2    declarations of local variables
+!     
+REAL, DIMENSION(KI,KSW) :: ZDIR_ALB   ! Direct albedo at time t
+REAL, DIMENSION(KI,KSW) :: ZSCA_ALB   ! Diffuse albedo at time t
+!
+REAL, DIMENSION(KI) :: ZEXNA      ! Exner function at forcing level
+REAL, DIMENSION(KI) :: ZEXNS      ! Exner function at surface level
+REAL, DIMENSION(KI) :: ZU         ! zonal wind
+REAL, DIMENSION(KI) :: ZV         ! meridian wind
+REAL, DIMENSION(KI) :: ZWIND      ! Wind
+REAL, DIMENSION(KI) :: ZCD        ! Drag coefficient on open sea
+REAL, DIMENSION(KI) :: ZCD_ICE    ! "     "          on seaice
+REAL, DIMENSION(KI) :: ZCDN       ! Neutral Drag coefficient on open sea
+REAL, DIMENSION(KI) :: ZCDN_ICE   ! "     "          on seaice
+REAL, DIMENSION(KI) :: ZCH        ! Heat transfer coefficient on open sea
+REAL, DIMENSION(KI) :: ZCH_ICE    ! "     "          on seaice
+REAL, DIMENSION(KI) :: ZCE        ! Vaporization heat transfer coefficient on open sea
+REAL, DIMENSION(KI) :: ZCE_ICE    ! "     "          on seaice
+REAL, DIMENSION(KI) :: ZRI        ! Richardson number on open sea
+REAL, DIMENSION(KI) :: ZRI_ICE    ! "     "          on seaice
+REAL, DIMENSION(KI) :: ZRESA_SEA  ! aerodynamical resistance on open sea
+REAL, DIMENSION(KI) :: ZRESA_SEA_ICE  ! "     "          on seaice
+REAL, DIMENSION(KI) :: ZUSTAR     ! friction velocity (m/s) on open sea
+REAL, DIMENSION(KI) :: ZUSTAR_ICE ! "     "          on seaice
+REAL, DIMENSION(KI) :: ZZ0        ! roughness length over open sea
+REAL, DIMENSION(KI) :: ZZ0_ICE    ! roughness length over seaice
+REAL, DIMENSION(KI) :: ZZ0H       ! heat roughness length over open sea
+REAL, DIMENSION(KI) :: ZZ0H_ICE   ! heat roughness length over seaice
+REAL, DIMENSION(KI) :: ZZ0W       ! Work array for Z0 and Z0H computation
+REAL, DIMENSION(KI) :: ZQSAT      ! humidity at saturation on open sea
+REAL, DIMENSION(KI) :: ZQSAT_ICE  ! "     "          on seaice
+!
+REAL, DIMENSION(KI) :: ZSFTH      ! Heat flux for open sea (and for sea-ice points if merged)
+REAL, DIMENSION(KI) :: ZSFTQ      ! Water vapor flux on open sea (and for sea-ice points if merged)
+REAL, DIMENSION(KI) :: ZSFU       ! zonal      momentum flux on open sea (and for sea-ice points if merged)(Pa)
+REAL, DIMENSION(KI) :: ZSFV       ! meridional momentum flux on open sea (and for sea-ice points if merged)(Pa)
+!
+REAL, DIMENSION(KI) :: ZSFTH_ICE  ! Heat flux on sea ice 
+REAL, DIMENSION(KI) :: ZSFTQ_ICE  ! Sea-ice sublimation flux
+REAL, DIMENSION(KI) :: ZSFU_ICE   ! zonal      momentum flux on seaice (Pa)
+REAL, DIMENSION(KI) :: ZSFV_ICE   ! meridional momentum flux on seaice (Pa)
+
+REAL, DIMENSION(KI) :: ZHU        ! Near surface relative humidity
+REAL, DIMENSION(KI) :: ZQA        ! specific humidity (kg/kg)
+REAL, DIMENSION(KI) :: ZEMIS      ! Emissivity at time t
+REAL, DIMENSION(KI) :: ZTRAD      ! Radiative temperature at time t
+!
+REAL, DIMENSION(KI) :: ZSST       ! XSST corrected for anomalously low values (which actually are sea-ice temp)
+REAL, DIMENSION(KI) :: ZMASK      ! A mask for diagnosing where seaice exists (or, for coupling_iceflux, may appear)
+!
+REAL                             :: ZCONVERTFACM0_SLT, ZCONVERTFACM0_DST
+REAL                             :: ZCONVERTFACM3_SLT, ZCONVERTFACM3_DST
+REAL                             :: ZCONVERTFACM6_SLT, ZCONVERTFACM6_DST
+!
+INTEGER                          :: ISIZE_WATER  ! number of points with some sea water 
+INTEGER                          :: ISIZE_ICE    ! number of points with some sea ice
+!
+INTEGER                          :: ISWB       ! number of shortwave spectral bands
+INTEGER                          :: JSWB       ! loop counter on shortwave spectral bands
+INTEGER                          :: ISLT       ! number of sea salt variable
+!
+REAL(KIND=JPRB) :: ZHOOK_HANDLE
+!-------------------------------------------------------------------------------------
+! Preliminaries:
+!-------------------------------------------------------------------------------------
+IF (LHOOK) CALL DR_HOOK('COUPLING_SEAFLUX_N',0,ZHOOK_HANDLE)
+IF (HTEST/='OK') THEN
+  CALL ABOR1_SFX('COUPLING_SEAFLUXN: FATAL ERROR DURING ARGUMENT TRANSFER')        
+END IF
+!-------------------------------------------------------------------------------------
+!
+ZEXNA    (:) = XUNDEF
+ZEXNS    (:) = XUNDEF
+ZU       (:) = XUNDEF
+ZV       (:) = XUNDEF
+ZWIND    (:) = XUNDEF
+ZSFTQ    (:) = XUNDEF
+ZSFTH    (:) = XUNDEF
+ZCD      (:) = XUNDEF    
+ZCDN     (:) = XUNDEF
+ZCH      (:) = XUNDEF
+ZCE      (:) = XUNDEF
+ZRI      (:) = XUNDEF
+ZHU      (:) = XUNDEF
+ZRESA_SEA(:) = XUNDEF
+ZUSTAR   (:) = XUNDEF
+ZZ0      (:) = XUNDEF
+ZZ0H     (:) = XUNDEF
+ZQSAT    (:) = XUNDEF
+!
+ZSFTQ_ICE(:) = XUNDEF
+ZSFTH_ICE(:) = XUNDEF
+ZCD_ICE  (:) = XUNDEF    
+ZCDN_ICE (:) = XUNDEF
+ZCH_ICE  (:) = XUNDEF
+ZCE_ICE  (:) = XUNDEF
+ZRI_ICE  (:) = XUNDEF
+ZRESA_SEA_ICE= XUNDEF
+ZUSTAR_ICE(:) = XUNDEF
+ZZ0_ICE  (:) = XUNDEF
+ZZ0H_ICE (:) = XUNDEF
+ZQSAT_ICE(:) = XUNDEF
+!
+ZEMIS    (:) = XUNDEF
+ZTRAD    (:) = XUNDEF
+ZDIR_ALB (:,:) = XUNDEF
+ZSCA_ALB (:,:) = XUNDEF
+!
+!-------------------------------------------------------------------------------------
+!
+ZEXNS(:)     = (PPS(:)/XP00)**(XRD/XCPD)
+ZEXNA(:)     = (PPA(:)/XP00)**(XRD/XCPD)
+!
+IF(LCPL_SEA .OR. LCPL_WAVE)THEN 
+  !Sea currents are taken into account
+  ZU(:)=PU(:)-SM%S%XUMER(:)
+  ZV(:)=PV(:)-SM%S%XVMER(:)
+ELSE
+  ZU(:)=PU(:)
+  ZV(:)=PV(:)        
+ENDIF
+!
+ZWIND(:) = SQRT(ZU(:)**2+ZV(:)**2)
+!
+PSFTS(:,:) = 0.
+!
+ZHU = 1.
+!
+ZQA(:) = PQA(:) / PRHOA(:)
+!
+! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+! Time evolution
+! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+!
+SM%S%TTIME%TIME = SM%S%TTIME%TIME + PTSTEP
+ CALL ADD_FORECAST_TO_DATE_SURF(SM%S%TTIME%TDATE%YEAR,SM%S%TTIME%TDATE%MONTH,SM%S%TTIME%TDATE%DAY,SM%S%TTIME%TIME)
+!
+!--------------------------------------------------------------------------------------
+! Fluxes over water according to Charnock formulae
+!--------------------------------------------------------------------------------------
+!
+IF (SM%S%LHANDLE_SIC) THEN 
+   ! Flux for sea are computed everywhere
+   ISIZE_WATER = SIZE(ZMASK)
+   ! Ensure freezing SST values where XSST actually has very low (sea-ice) values (old habits)
+   ZSST(:)=MAX(SM%S%XSST(:), XTTSI) 
+   ! Flux over sea-ice will not be computed by next calls, but by coupling_iceflux. Hence :
+   ISIZE_ICE   = 0
+   ! Flux over sea-ice will be computed by coupling_iceflux anywhere sea-ice could form in one 
+   ! time-step (incl. under forcing). ZMASK value is set to 1. on these points
+   ZMASK(:)=0.
+   WHERE ( SM%S%XSIC(:) > 0. ) ZMASK(:)=1. 
+   ! To be large, assume that seaice may form where SST is < 10C
+   WHERE ( SM%S%XSST(:) - XTTS <= 10. ) ZMASK(:)=1.
+   IF (SM%S%LINTERPOL_SIC) WHERE (SM%S%XFSIC(:) > 0. ) ZMASK(:)=1. 
+   IF (SM%S%LINTERPOL_SIT) WHERE (SM%S%XFSIT(:) > 0. ) ZMASK(:)=1.
+ELSE
+   ZSST (:) = SM%S%XSST(:)
+   ZMASK(:) = SM%S%XSST(:) - XTTS
+   ISIZE_WATER = COUNT(ZMASK(:)>=0.)
+   ISIZE_ICE   = SIZE(SM%S%XSST) - ISIZE_WATER
+ENDIF
+!
+SELECT CASE (SM%S%CSEA_FLUX)
+  CASE ('DIRECT')
+    CALL WATER_FLUX(SM%S%XZ0,                                              &
+                      PTA, ZEXNA, PRHOA, ZSST, ZEXNS, ZQA, PRAIN,     &
+                      PSNOW, XTTS,                                    &
+                      ZWIND, PZREF, PUREF,                            &
+                      PPS, SM%S%LHANDLE_SIC, ZQSAT,                        &
+                      ZSFTH, ZSFTQ, ZUSTAR,                           &
+                      ZCD, ZCDN, ZCH, ZRI, ZRESA_SEA, ZZ0H            )  
+  CASE ('ITERAT')
+    CALL MR98      (SM%S%XZ0,                                              &
+                      PTA, ZEXNA, PRHOA, SM%S%XSST, ZEXNS, ZQA,            &
+                      XTTS,                                           &
+                      ZWIND, PZREF, PUREF,                            &
+                      PPS, ZQSAT,                                     &
+                      ZSFTH, ZSFTQ, ZUSTAR,                           &
+                      ZCD, ZCDN, ZCH, ZRI, ZRESA_SEA, ZZ0H            )
+  CASE ('ECUME ','ECUME6')
+    CALL ECUME_SEAFLUX(SM%S%XZ0, ZMASK, ISIZE_WATER, ISIZE_ICE,            &
+                      PTA, ZEXNA ,PRHOA, ZSST, SM%S%XSSS, ZEXNS, ZQA,      &
+                      PRAIN, PSNOW,                                   &
+                      ZWIND, PZREF, PUREF, PPS, PPA,                  &
+                      SM%S%XICHCE, SM%S%LPRECIP, SM%S%LPWEBB, SM%S%LPWG, SM%S%NZ0,             &
+                      SM%S%LHANDLE_SIC, ZQSAT, ZSFTH, ZSFTQ, ZUSTAR,       &
+                      ZCD, ZCDN, ZCH, ZCE, ZRI, ZRESA_SEA, ZZ0H,      &
+                      SM%S%LPERTFLUX, SM%S%XPERTFLUX, SM%S%CSEA_FLUX                 )
+  CASE ('COARE3')
+    CALL COARE30_SEAFLUX(SM%S, &
+                         ZMASK, ISIZE_WATER, ISIZE_ICE,          &
+                      PTA, ZEXNA ,PRHOA, ZSST, ZEXNS, ZQA, PRAIN,     &
+                      PSNOW,                                          &
+                      ZWIND, PZREF, PUREF,                            &
+                      PPS, ZQSAT,                        &
+                      ZSFTH, ZSFTQ, ZUSTAR,                           &
+                      ZCD, ZCDN, ZCH, ZCE, ZRI, ZRESA_SEA, ZZ0H,      &
+                      SM%S%XHS, SM%S%XTP                                          )  
+END SELECT
+!
+!-------------------------------------------------------------------------------------
+!radiative properties at time t
+!-------------------------------------------------------------------------------------
+!
+ISWB = SIZE(PSW_BANDS)
+!
+DO JSWB=1,ISWB
+  ZDIR_ALB(:,JSWB) = SM%S%XDIR_ALB(:)
+  ZSCA_ALB(:,JSWB) = SM%S%XSCA_ALB(:)
+END DO
+!
+IF (SM%S%LHANDLE_SIC) THEN 
+   ZEMIS(:) =   (1 - SM%S%XSIC(:)) * XEMISWAT    + SM%S%XSIC(:) * XEMISWATICE
+   ZTRAD(:) = (((1 - SM%S%XSIC(:)) * XEMISWAT    * SM%S%XSST (:)**4 + &
+                     SM%S%XSIC(:)  * XEMISWATICE * SM%S%XTICE(:)**4)/ &
+                     ZEMIS(:)) ** 0.25
+ELSE
+   ZTRAD(:) = SM%S%XSST (:)
+   ZEMIS(:) = SM%S%XEMIS(:)
+END IF
+!
+!-------------------------------------------------------------------------------------
+!Specific fields for seaice model (when using earth system model or embedded  
+!seaice scheme)
+!-------------------------------------------------------------------------------------
+!
+IF(LCPL_SEAICE.OR.SM%S%LHANDLE_SIC)THEN
+  CALL COUPLING_ICEFLUX_n(KI, PTA, ZEXNA, PRHOA, SM%S%XTICE, ZEXNS, &
+                     ZQA, PRAIN, PSNOW, ZWIND, PZREF, PUREF,   &
+                     PPS, SM%S%XSST, XTTS, ZSFTH_ICE, ZSFTQ_ICE,    &  
+                     SM%S%LHANDLE_SIC, ZMASK, ZQSAT_ICE, ZZ0_ICE,   &
+                     ZUSTAR_ICE, ZCD_ICE, ZCDN_ICE, ZCH_ICE,   &
+                     ZRI_ICE, ZRESA_SEA_ICE, ZZ0H_ICE          )
+ENDIF
+!
+IF (SM%S%LHANDLE_SIC) CALL COMPLEMENT_EACH_OTHER_FLUX
+!
+!-------------------------------------------------------------------------------------
+! Momentum fluxes over sea or sea-ice
+!-------------------------------------------------------------------------------------
+!
+ CALL SEA_MOMENTUM_FLUXES(ZCD, ZSFU, ZSFV)
+!
+! Momentum fluxes over sea-ice if embedded seaice scheme is used
+!
+IF (SM%S%LHANDLE_SIC) CALL SEA_MOMENTUM_FLUXES(ZCD_ICE, ZSFU_ICE, ZSFV_ICE)
+!
+! CO2 flux
+!
+PSFCO2(:) = 0.0
+!
+!IF(LCPL_SEA.AND.CSEACO2=='NONE')THEN
+!  PSFCO2(:) = XSEACO2(:)
+!ELSEIF(CSEACO2=='CST ')THEN
+!  PSFCO2 = E * deltapCO2 
+!  According to Wanninkhof (medium hypothesis) : 
+!  E = 1.13.10^-3 * WIND^2 CO2mol.m-2.yr-1.uatm-1
+!    = 1.13.10^-3 * WIND^2 * Mco2.10^-3 * (1/365*24*3600)
+!  deltapCO2 = -8.7 uatm (Table 1 half hypothesis)
+PSFCO2(:) = - ZWIND(:)**2 * 1.13E-3 * 8.7 * 44.E-3 / ( 365*24*3600 )
+!ENDIF
+!
+!-------------------------------------------------------------------------------------
+! Scalar fluxes:
+!-------------------------------------------------------------------------------------
+!
+IF (SM%CHS%SVS%NBEQ>0) THEN
+  IF (SM%CHS%CCH_DRY_DEP == "WES89") THEN
+
+    CALL CH_DEP_WATER  (ZRESA_SEA, ZUSTAR, PTA, ZTRAD,      &
+                          PSV(:,SM%CHS%SVS%NSV_CHSBEG:SM%CHS%SVS%NSV_CHSEND),       &
+                          SM%CHS%SVS%CSV(SM%CHS%SVS%NSV_CHSBEG:SM%CHS%SVS%NSV_CHSEND),         &
+                          SM%CHS%XDEP(:,1:SM%CHS%SVS%NBEQ) )  
+
+   PSFTS(:,SM%CHS%SVS%NSV_CHSBEG:SM%CHS%SVS%NSV_CHSEND) = - PSV(:,SM%CHS%SVS%NSV_CHSBEG:SM%CHS%SVS%NSV_CHSEND)  &
+                                               * SM%CHS%XDEP(:,1:SM%CHS%SVS%NBEQ)  
+     IF (SM%CHS%SVS%NAEREQ > 0 ) THEN
+        CALL CH_AER_DEP(PSV(:,SM%CHS%SVS%NSV_AERBEG:SM%CHS%SVS%NSV_AEREND),&
+                          PSFTS(:,SM%CHS%SVS%NSV_AERBEG:SM%CHS%SVS%NSV_AEREND),&
+                          ZUSTAR,ZRESA_SEA,PTA,PRHOA)     
+      END IF
+
+  ELSE
+    PSFTS(:,SM%CHS%SVS%NSV_CHSBEG:SM%CHS%SVS%NSV_CHSEND) =0.
+    IF (SM%CHS%SVS%NSV_AEREND.GT.SM%CHS%SVS%NSV_AERBEG)     PSFTS(:,SM%CHS%SVS%NSV_AERBEG:SM%CHS%SVS%NSV_AEREND) =0.
+  ENDIF
+ENDIF
+!
+IF (SM%CHS%SVS%NSLTEQ>0) THEN
+  ISLT = SM%CHS%SVS%NSV_SLTEND - SM%CHS%SVS%NSV_SLTBEG + 1
+
+  CALL COUPLING_SLT_n(SLT, &
+       SIZE(ZUSTAR,1),           & !I [nbr] number of sea point
+       ISLT,                     & !I [nbr] number of sea salt variables
+       ZWIND,                    & !I [m/s] wind velocity
+       PSFTS(:,SM%CHS%SVS%NSV_SLTBEG:SM%CHS%SVS%NSV_SLTEND) )   
+ENDIF
+!
+IF (SM%CHS%SVS%NDSTEQ>0) THEN
+  CALL DSLT_DEP(PSV(:,SM%CHS%SVS%NSV_DSTBEG:SM%CHS%SVS%NSV_DSTEND), PSFTS(:,SM%CHS%SVS%NSV_DSTBEG:SM%CHS%SVS%NSV_DSTEND),   &
+                ZUSTAR, ZRESA_SEA, PTA, PRHOA, DST%XEMISSIG_DST, DST%XEMISRADIUS_DST,   &
+                JPMODE_DST, XDENSITY_DST, XMOLARWEIGHT_DST, ZCONVERTFACM0_DST,  &
+                ZCONVERTFACM6_DST, ZCONVERTFACM3_DST, LVARSIG_DST, LRGFIX_DST,  &
+                CVERMOD  )  
+
+  CALL MASSFLUX2MOMENTFLUX(         &
+    PSFTS(:,SM%CHS%SVS%NSV_DSTBEG:SM%CHS%SVS%NSV_DSTEND), & !I/O ![kg/m2/sec] In: flux of only mass, out: flux of moments
+    PRHOA,                          & !I [kg/m3] air density
+    DST%XEMISRADIUS_DST,                &!I [um] emitted radius for the modes (max 3)
+    DST%XEMISSIG_DST,                   &!I [-] emitted sigma for the different modes (max 3)
+    NDSTMDE,                        &
+    ZCONVERTFACM0_DST,              &
+    ZCONVERTFACM6_DST,              &
+    ZCONVERTFACM3_DST,              &
+    LVARSIG_DST, LRGFIX_DST         )  
+ENDIF
+
+
+IF (SM%CHS%SVS%NSLTEQ>0) THEN
+  CALL DSLT_DEP(PSV(:,SM%CHS%SVS%NSV_SLTBEG:SM%CHS%SVS%NSV_SLTEND), PSFTS(:,SM%CHS%SVS%NSV_SLTBEG:SM%CHS%SVS%NSV_SLTEND),   &
+                ZUSTAR, ZRESA_SEA, PTA, PRHOA, SLT%XEMISSIG_SLT, SLT%XEMISRADIUS_SLT,   &
+                JPMODE_SLT, XDENSITY_SLT, XMOLARWEIGHT_SLT, ZCONVERTFACM0_SLT,  &
+                ZCONVERTFACM6_SLT, ZCONVERTFACM3_SLT, LVARSIG_SLT, LRGFIX_SLT,  &
+                CVERMOD  )  
+
+  CALL MASSFLUX2MOMENTFLUX(         &
+    PSFTS(:,SM%CHS%SVS%NSV_SLTBEG:SM%CHS%SVS%NSV_SLTEND), & !I/O ![kg/m2/sec] In: flux of only mass, out: flux of moments
+    PRHOA,                          & !I [kg/m3] air density
+    SLT%XEMISRADIUS_SLT,                &!I [um] emitted radius for the modes (max 3)
+    SLT%XEMISSIG_SLT,                   &!I [-] emitted sigma for the different modes (max 3)
+    NSLTMDE,                        &
+    ZCONVERTFACM0_SLT,              &
+    ZCONVERTFACM6_SLT,              &
+    ZCONVERTFACM3_SLT,              &
+    LVARSIG_SLT, LRGFIX_SLT         ) 
+ENDIF
+!
+!-------------------------------------------------------------------------------
+! Inline diagnostics at time t for SST and TRAD
+!-------------------------------------------------------------------------------
+!
+ CALL DIAG_INLINE_SEAFLUX_n(SM%DGS, SM%DGSI, SM%S, &
+                           PTSTEP, PTA, ZQA, PPA, PPS, PRHOA, PU, &
+     PV, PZREF, PUREF, ZCD, ZCDN, ZCH, ZCE, ZRI, ZHU,       &
+     ZZ0H, ZQSAT, ZSFTH, ZSFTQ, ZSFU, ZSFV,            &
+     PDIR_SW, PSCA_SW, PLW, ZDIR_ALB, ZSCA_ALB,    &
+     ZEMIS, ZTRAD, PRAIN, PSNOW,                            &
+     ZCD_ICE, ZCDN_ICE, ZCH_ICE, ZCE_ICE, ZRI_ICE,          &
+     ZZ0_ICE, ZZ0H_ICE, ZQSAT_ICE, ZSFTH_ICE, ZSFTQ_ICE,    &
+     ZSFU_ICE, ZSFV_ICE)
+!
+!-------------------------------------------------------------------------------
+! A kind of "average_flux"
+!-------------------------------------------------------------------------------
+!
+IF (SM%S%LHANDLE_SIC) THEN
+   PSFTH  (:) = ZSFTH (:) * ( 1 - SM%S%XSIC (:)) + ZSFTH_ICE(:) * SM%S%XSIC(:)
+   PSFTQ  (:) = ZSFTQ (:) * ( 1 - SM%S%XSIC (:)) + ZSFTQ_ICE(:) * SM%S%XSIC(:)
+   PSFU   (:) = ZSFU  (:) * ( 1 - SM%S%XSIC (:)) +  ZSFU_ICE(:) * SM%S%XSIC(:)
+   PSFV   (:) = ZSFV  (:) * ( 1 - SM%S%XSIC (:)) +  ZSFV_ICE(:) * SM%S%XSIC(:)
+ELSE
+   PSFTH  (:) = ZSFTH (:) 
+   PSFTQ  (:) = ZSFTQ (:) 
+   PSFU   (:) = ZSFU  (:) 
+   PSFV   (:) = ZSFV  (:) 
+ENDIF
+!
+!-------------------------------------------------------------------------------
+! IMPOSED SSS OR INTERPOLATED SSS AT TIME t+1
+!-------------------------------------------------------------------------------
+!
+! Daily update Sea surface salinity from monthly data
+!
+IF (SM%S%LINTERPOL_SSS .AND. MOD(SM%S%TTIME%TIME,XDAY) == 0.) THEN
+   CALL INTERPOL_SST_MTH(SM%S, &
+                            SM%S%TTIME%TDATE%YEAR,SM%S%TTIME%TDATE%MONTH,SM%S%TTIME%TDATE%DAY,'S',SM%S%XSSS)
+   IF (ANY(SM%S%XSSS(:)<0.0)) THEN
+      CALL ABOR1_SFX('COUPLING_SEAFLUX_N: XSSS should be >=0') 
+   ENDIF                      
+ENDIF
+!
+!-------------------------------------------------------------------------------
+! SEA-ICE coupling at time t+1
+!-------------------------------------------------------------------------------
+!
+IF (SM%S%LHANDLE_SIC) THEN
+   IF (SM%S%LINTERPOL_SIC) THEN
+      IF ((MOD(SM%S%TTIME%TIME,XDAY) == 0.) .OR. (PTIMEC <= PTSTEP )) THEN
+      ! Daily update Sea Ice Cover constraint from monthly data
+         CALL INTERPOL_SST_MTH(SM%S, &
+                            SM%S%TTIME%TDATE%YEAR,SM%S%TTIME%TDATE%MONTH,SM%S%TTIME%TDATE%DAY,'C',SM%S%XFSIC)
+         IF (ANY(SM%S%XFSIC(:)>1.0).OR.ANY(SM%S%XFSIC(:)<0.0)) THEN
+            CALL ABOR1_SFX('COUPLING_SEAFLUX_N: FSIC should be >=0 and <=1') 
+         ENDIF                    
+      ENDIF
+   ENDIF
+   IF (SM%S%LINTERPOL_SIT) THEN
+      IF ((MOD(SM%S%TTIME%TIME,XDAY) == 0.) .OR. (PTIMEC <= PTSTEP )) THEN
+      ! Daily update Sea Ice Thickness constraint from monthly data
+         CALL INTERPOL_SST_MTH(SM%S, &
+                            SM%S%TTIME%TDATE%YEAR,SM%S%TTIME%TDATE%MONTH,SM%S%TTIME%TDATE%DAY,'H',SM%S%XFSIT)
+         IF (ANY(SM%S%XFSIT(:)<0.0)) THEN
+            CALL ABOR1_SFX('COUPLING_SEAFLUX_N: XFSIT should be >=0') 
+         ENDIF  
+      ENDIF
+   ENDIF
+   IF (SM%S%CSEAICE_SCHEME=='GELATO') THEN
+      CALL SEAICE_GELATO1D_n(SM%S, &
+                             HPROGRAM,PTIMEC, PTSTEP, SM%S%TGLT, SM%S%XSST, SM%S%XSSS, &
+                             SM%S%XFSIC, SM%S%XFSIT, SM%S%XSIC, SM%S%XTICE, SM%S%XICE_ALB)
+   ENDIF
+   ! Update of cell-averaged albedo, emissivity and radiative 
+   ! temperature is done later
+ENDIF
+!
+!-------------------------------------------------------------------------------
+! OCEANIC COUPLING, IMPOSED SST OR INTERPOLATED SST AT TIME t+1
+!-------------------------------------------------------------------------------
+!
+IF (SM%O%LMERCATOR) THEN
+   !
+   ! Update SST reference profile for relaxation purpose
+   IF (SM%DTS%LSST_DATA) THEN
+      CALL SST_UPDATE(SM%DTS, SM%S, &
+                      SM%OR%XSEAT_REL(:,NOCKMIN+1), SM%S%TTIME)
+      !
+      ! Convert to degree C for ocean model
+      SM%OR%XSEAT_REL(:,NOCKMIN+1) = SM%OR%XSEAT_REL(:,NOCKMIN+1) - XTT
+   ENDIF
+   !
+   CALL MOD1D_n(SM%DGO, SM%O, SM%OR, SM%SG, SM%S, &
+                HPROGRAM,PTIME,ZEMIS(:),ZDIR_ALB(:,1:KSW),ZSCA_ALB(:,1:KSW),&
+                PLW(:),PSCA_SW(:,1:KSW),PDIR_SW(:,1:KSW),PSFTH(:),          &
+                PSFTQ(:),PSFU(:),PSFV(:),PRAIN(:),SM%S%XSST(:))
+   !
+ELSEIF(SM%DTS%LSST_DATA)THEN 
+   !
+   ! Imposed SST 
+   !
+   CALL SST_UPDATE(SM%DTS, SM%S, &
+                      SM%S%XSST, SM%S%TTIME)
+   !
+ELSEIF (SM%S%LINTERPOL_SST.AND.MOD(SM%S%TTIME%TIME,XDAY) == 0.) THEN
+   !
+   ! Imposed monthly SST 
+   !
+   CALL INTERPOL_SST_MTH(SM%S, &
+                            SM%S%TTIME%TDATE%YEAR,SM%S%TTIME%TDATE%MONTH,SM%S%TTIME%TDATE%DAY,'T',SM%S%XSST)
+   !
+ENDIF
+!
+!-------------------------------------------------------------------------------
+!Physical properties see by the atmosphere in order to close the energy budget 
+!between surfex and the atmosphere. All variables should be at t+1 but very 
+!difficult to do. Maybe it will be done later. However, Ts is at time t+1
+!-------------------------------------------------------------------------------
+!
+IF (SM%S%LHANDLE_SIC) THEN
+   IF (SM%S%CSEAICE_SCHEME/='GELATO') THEN
+      SM%S%XTICE=SM%S%XSST
+      SM%S%XSIC=SM%S%XFSIC
+      SM%S%XICE_ALB=XALBSEAICE           
+   ENDIF         
+   PTSURF (:) = SM%S%XSST  (:) * ( 1 - SM%S%XSIC (:)) +     SM%S%XTICE(:) * SM%S%XSIC(:)
+   PQSURF (:) = ZQSAT (:) * ( 1 - SM%S%XSIC (:)) + ZQSAT_ICE(:) * SM%S%XSIC(:)
+   ZZ0W   (:) = ( 1 - SM%S%XSIC(:) ) * 1.0/(LOG(PUREF(:)/ZZ0(:))    **2)  +  &
+                      SM%S%XSIC(:)   * 1.0/(LOG(PUREF(:)/ZZ0_ICE(:))**2)  
+   PZ0    (:) = PUREF (:) * EXP ( - SQRT ( 1./  ZZ0W(:) ))
+   ZZ0W   (:) = ( 1 - SM%S%XSIC(:) ) * 1.0/(LOG(PZREF(:)/ZZ0H(:))    **2)  +  &
+                      SM%S%XSIC(:)   * 1.0/(LOG(PZREF(:)/ZZ0H_ICE(:))**2)  
+   PZ0H   (:) = PZREF (:) * EXP ( - SQRT ( 1./  ZZ0W(:) ))
+ELSE
+   PTSURF (:) = SM%S%XSST  (:) 
+   PQSURF (:) = ZQSAT (:) 
+   PZ0    (:) = SM%S%XZ0   (:) 
+   PZ0H   (:) = ZZ0H  (:) 
+ENDIF
+!
+!-------------------------------------------------------------------------------
+!Radiative properties at time t+1 (see by the atmosphere) in order to close
+!the energy budget between surfex and the atmosphere
+!-------------------------------------------------------------------------------
+!
+ CALL UPDATE_RAD_SEA(SM%S%CSEA_ALB,SM%S%XSST,PZENITH2,XTTS,SM%S%XEMIS,  &
+                     SM%S%XDIR_ALB,SM%S%XSCA_ALB,PDIR_ALB,PSCA_ALB,&
+                     PEMIS,PTRAD,SM%S%LHANDLE_SIC,SM%S%XTICE,SM%S%XSIC, &
+                     SM%S%XICE_ALB,PU,PV)
+!
+!=======================================================================================
+!
+IF (LHOOK) CALL DR_HOOK('COUPLING_SEAFLUX_N',1,ZHOOK_HANDLE)
+!
+!=======================================================================================
+!
+ CONTAINS
+!
+SUBROUTINE SEA_MOMENTUM_FLUXES(PCD, PSFU, PSFV)
+!
+IMPLICIT NONE
+!
+REAL, DIMENSION(KI), INTENT(IN)  :: PCD       ! Drag coefficient (on open sea or seaice)
+REAL, DIMENSION(KI), INTENT(OUT) :: PSFU      ! zonal momentum flux                   (Pa)
+REAL, DIMENSION(KI), INTENT(OUT) :: PSFV      ! meridian momentum flux                (Pa)
+!
+REAL, DIMENSION(KI) :: ZUSTAR2    ! square of friction velocity (m2/s2)
+REAL, DIMENSION(KI) :: ZWORK      ! Work array
+!
+REAL, DIMENSION(KI) :: ZPEW_A_COEF
+REAL, DIMENSION(KI) :: ZPEW_B_COEF
+!
+REAL(KIND=JPRB) :: ZHOOK_HANDLE
+!
+IF (LHOOK) CALL DR_HOOK('COUPLING_SEAFLUX_N: SEA_MOMENTUM_FLUXES',0,ZHOOK_HANDLE)
+!
+IF( (LCPL_SEA .OR. LCPL_WAVE) .AND. HCOUPLING .EQ. 'E')THEN
+  ZPEW_A_COEF(:)=0.0
+  ZPEW_B_COEF(:)=ZWIND(:)
+ELSE
+  ZPEW_A_COEF(:)=PPEW_A_COEF(:)
+  ZPEW_B_COEF(:)=PPEW_B_COEF(:)
+ENDIF
+!
+ZWORK  (:) = XUNDEF
+ZUSTAR2(:) = XUNDEF
+!
+IF(CIMPLICIT_WIND=='OLD')THEN
+! old implicitation (m2/s2)
+  ZUSTAR2(:) = (PCD(:)*ZWIND(:)*ZPEW_B_COEF(:)) /            &
+              (1.0-PRHOA(:)*PCD(:)*ZWIND(:)*ZPEW_A_COEF(:))
+ELSE
+! new implicitation (m2/s2)
+  ZUSTAR2(:) = (PCD(:)*ZWIND(:)*(2.*ZPEW_B_COEF(:)-ZWIND(:))) /&
+              (1.0-2.0*PRHOA(:)*PCD(:)*ZWIND(:)*ZPEW_A_COEF(:))
+!                   
+  ZWORK(:)  = PRHOA(:)*ZPEW_A_COEF(:)*ZUSTAR2(:) + ZPEW_B_COEF(:)
+  ZWORK(:) = MAX(ZWORK(:),0.)
+!
+  WHERE(ZPEW_A_COEF(:)/= 0.)
+        ZUSTAR2(:) = MAX( ( ZWORK(:) - ZPEW_B_COEF(:) ) / (PRHOA(:)*ZPEW_A_COEF(:)), 0.)
+  ENDWHERE
+!              
+ENDIF
+!
+PSFU = 0.
+PSFV = 0.
+WHERE (ZWIND(:)>0.)
+  PSFU(:) = - PRHOA(:) * ZUSTAR2(:) * ZU(:) / ZWIND(:)
+  PSFV(:) = - PRHOA(:) * ZUSTAR2(:) * ZV(:) / ZWIND(:)
+END WHERE
+!
+IF (LHOOK) CALL DR_HOOK('COUPLING_SEAFLUX_N: SEA_MOMENTUM_FLUXES',1,ZHOOK_HANDLE)
+!
+END SUBROUTINE SEA_MOMENTUM_FLUXES
+!
+!=======================================================================================
+!
+SUBROUTINE COMPLEMENT_EACH_OTHER_FLUX
+!
+! Provide dummy fluxes on places with no open-sea or no sea-ice 
+! Allows a smooth computing of CLS parameters in all cases while avoiding 
+! having to pack arrays (in routines PARAM_CLS and CLS_TQ)
+!
+IMPLICIT NONE
+!
+REAL(KIND=JPRB) :: ZHOOK_HANDLE
+!
+IF (LHOOK) CALL DR_HOOK('COUPLING_SEAFLUX_N: COMPLEMENT_EACH_OTHER_FLUX',0,ZHOOK_HANDLE)
+!
+  WHERE (SM%S%XSIC(:) == 1.)
+     ZSFTH=ZSFTH_ICE 
+     ZSFTQ=ZSFTQ_ICE 
+     ZSFU=ZSFU_ICE
+     ZSFV=ZSFV_ICE
+     ZQSAT=ZQSAT_ICE
+     ZCD=ZCD_ICE
+     ZCDN=ZCDN_ICE
+     ZCH=ZCH_ICE
+     ZCE=ZCE_ICE
+     ZRI=ZRI_ICE 
+     ZZ0H=ZZ0H_ICE
+  END WHERE
+  WHERE (SM%S%XSIC(:) == 0.)
+     ZSFTH_ICE=ZSFTH 
+     ZSFTQ_ICE=ZSFTQ 
+     ZSFU_ICE=ZSFU
+     ZSFV_ICE=ZSFV
+     ZQSAT_ICE=ZQSAT
+     ZCD_ICE=ZCD
+     ZCDN_ICE=ZCDN
+     ZCH_ICE=ZCH
+     ZCE_ICE=ZCE
+     ZRI_ICE=ZRI 
+     ZZ0H_ICE=ZZ0H
+  END WHERE
+!
+IF (LHOOK) CALL DR_HOOK('COUPLING_SEAFLUX_N: COMPLEMENT_EACH_OTHER_FLUX',1,ZHOOK_HANDLE)
+!
+END SUBROUTINE COMPLEMENT_EACH_OTHER_FLUX
+!
+!=======================================================================================
+!
+END SUBROUTINE COUPLING_SEAFLUX_n
diff --git a/src/ARCH_SRC/CPL_WAVE/SURFEX/dealloc_seafluxn.F90 b/src/ARCH_SRC/CPL_WAVE/SURFEX/dealloc_seafluxn.F90
new file mode 100644
index 0000000000000000000000000000000000000000..609ecc7a89fb7d3787f68e5397f3abc8bc0c1c8d
--- /dev/null
+++ b/src/ARCH_SRC/CPL_WAVE/SURFEX/dealloc_seafluxn.F90
@@ -0,0 +1,115 @@
+!SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence
+!SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!SFX_LIC for details. version 1.
+!     #################################################################################
+SUBROUTINE DEALLOC_SEAFLUX_n (CHS, SG, S)
+!     #################################################################################
+!
+!!****  *DEALLOC_SEAFLUX_n * - Deallocate all arrays
+!!
+!!    PURPOSE
+!!    -------
+!
+!!**  METHOD
+!!    ------
+!!
+!!    REFERENCE
+!!    ---------
+!!      
+!!
+!!    AUTHOR
+!!    ------
+!!     V. Masson 
+!!
+!!    MODIFICATIONS
+!!    -------------
+!!      Original    01/2004
+!!      S. Belamari 03/2014   other _SEA_ variables
+!!      S. Senesi   09/2013   introduce sea-ice-cover ans sea-surface salinity
+!!      Modified    11/2014 : J. Pianezze : deallocation of wave parameters
+!!-------------------------------------------------------------------------
+!
+!
+!
+!
+USE MODD_CH_SEAFLUX_n, ONLY : CH_SEAFLUX_t
+USE MODD_SEAFLUX_GRID_n, ONLY : SEAFLUX_GRID_t
+USE MODD_SEAFLUX_n, ONLY : SEAFLUX_t
+!
+USE MODI_GLTOOLS_DEALLOC
+!
+USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
+USE PARKIND1  ,ONLY : JPRB
+!
+IMPLICIT NONE
+!
+!*      0.1    declarations of arguments
+!
+!
+!*      0.2    declarations of local variables
+!
+!
+TYPE(CH_SEAFLUX_t), INTENT(INOUT) :: CHS
+TYPE(SEAFLUX_GRID_t), INTENT(INOUT) :: SG
+TYPE(SEAFLUX_t), INTENT(INOUT) :: S
+!
+REAL(KIND=JPRB) :: ZHOOK_HANDLE
+!
+!-------------------------------------------------------------------------------------
+!
+IF (LHOOK) CALL DR_HOOK('DEALLOC_SEAFLUX_N',0,ZHOOK_HANDLE)
+!
+IF (ASSOCIATED(S%LCOVER ))   DEALLOCATE(S%LCOVER )
+IF (ASSOCIATED(S%XCOVER ))   DEALLOCATE(S%XCOVER )
+IF (ASSOCIATED(S%XZS    ))   DEALLOCATE(S%XZS    )
+IF (ASSOCIATED(S%XSST   ))   DEALLOCATE(S%XSST   )
+IF (ASSOCIATED(S%XSSS   ))   DEALLOCATE(S%XSSS   )
+IF (ASSOCIATED(S%XSIC   ))   DEALLOCATE(S%XSIC   )
+IF (ASSOCIATED(S%XFSIC  ))   DEALLOCATE(S%XFSIC  )
+IF (ASSOCIATED(S%XFSIT  ))   DEALLOCATE(S%XFSIT  )
+IF (ASSOCIATED(S%XTP    ))   DEALLOCATE(S%XTP    )
+IF (ASSOCIATED(S%XHS    ))   DEALLOCATE(S%XHS    )
+IF (ASSOCIATED(S%XZ0    ))   DEALLOCATE(S%XZ0    )
+IF (ASSOCIATED(S%XZ0H   ))   DEALLOCATE(S%XZ0H   )
+IF (ASSOCIATED(S%XSEABATHY)) DEALLOCATE(S%XSEABATHY)
+IF (ASSOCIATED(S%XEMIS  ))   DEALLOCATE(S%XEMIS  )
+IF (ASSOCIATED(S%XDIR_ALB))  DEALLOCATE(S%XDIR_ALB)
+IF (ASSOCIATED(S%XSCA_ALB))  DEALLOCATE(S%XSCA_ALB)
+!
+!-------------------------------------------------------------------------------------
+!
+IF (ASSOCIATED(SG%XGRID_PAR )) DEALLOCATE(SG%XGRID_PAR )
+IF (ASSOCIATED(SG%XLAT      )) DEALLOCATE(SG%XLAT      )
+IF (ASSOCIATED(SG%XLON      )) DEALLOCATE(SG%XLON      )
+IF (ASSOCIATED(SG%XMESH_SIZE)) DEALLOCATE(SG%XMESH_SIZE)
+!
+!-------------------------------------------------------------------------------------
+!
+IF(ASSOCIATED(CHS%XDEP))      DEALLOCATE(CHS%XDEP)
+IF(ASSOCIATED(CHS%CCH_NAMES)) DEALLOCATE(CHS%CCH_NAMES)
+IF(ASSOCIATED(CHS%SVS%CSV))       DEALLOCATE(CHS%SVS%CSV)
+!
+!-------------------------------------------------------------------------------------
+!
+IF(ASSOCIATED(S%XCPL_SEA_WIND))      DEALLOCATE(S%XCPL_SEA_WIND)
+IF(ASSOCIATED(S%XCPL_SEA_FWSU))      DEALLOCATE(S%XCPL_SEA_FWSU)
+IF(ASSOCIATED(S%XCPL_SEA_FWSV))      DEALLOCATE(S%XCPL_SEA_FWSV)
+IF(ASSOCIATED(S%XCPL_SEA_SNET))      DEALLOCATE(S%XCPL_SEA_SNET)
+IF(ASSOCIATED(S%XCPL_SEA_HEAT))      DEALLOCATE(S%XCPL_SEA_HEAT)
+IF(ASSOCIATED(S%XCPL_SEA_EVAP))      DEALLOCATE(S%XCPL_SEA_EVAP)
+IF(ASSOCIATED(S%XCPL_SEA_RAIN))      DEALLOCATE(S%XCPL_SEA_RAIN)
+IF(ASSOCIATED(S%XCPL_SEA_SNOW))      DEALLOCATE(S%XCPL_SEA_SNOW)
+IF(ASSOCIATED(S%XCPL_SEA_EVPR))      DEALLOCATE(S%XCPL_SEA_EVPR)
+!
+!-------------------------------------------------------------------------------------
+!
+IF (ASSOCIATED(S%TGLT%bat) .AND. S%CSEAICE_SCHEME=='GELATO' ) CALL GLTOOLS_DEALLOC(S%TGLT)
+!
+IF (LHOOK) CALL DR_HOOK('DEALLOC_SEAFLUX_N',1,ZHOOK_HANDLE)
+!
+!-------------------------------------------------------------------------------------
+!
+END SUBROUTINE DEALLOC_SEAFLUX_n
+
+
diff --git a/src/ARCH_SRC/CPL_WAVE/SURFEX/default_prep_seaflux.F90 b/src/ARCH_SRC/CPL_WAVE/SURFEX/default_prep_seaflux.F90
new file mode 100644
index 0000000000000000000000000000000000000000..8d898603107898a66832c87b6daf164fb628d3e2
--- /dev/null
+++ b/src/ARCH_SRC/CPL_WAVE/SURFEX/default_prep_seaflux.F90
@@ -0,0 +1,106 @@
+!SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence
+!SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!SFX_LIC for details. version 1.
+!     #########
+      SUBROUTINE DEFAULT_PREP_SEAFLUX
+!     ###########################
+!
+!!****  *DEFAULT_PREP_SEAFLUX* - routine to set default values for the configuration for SEAFLUX field preparation
+!!
+!!    PURPOSE
+!!    -------
+!!
+!!**  METHOD
+!!    ------
+!!
+!!    EXTERNAL
+!!    --------
+!!
+!!
+!!    IMPLICIT ARGUMENTS
+!!    ------------------
+!!
+!!    REFERENCE
+!!    ---------
+!!
+!!
+!!    AUTHOR
+!!    ------
+!!      S. Malardel   *Meteo France*
+!!
+!!    MODIFICATIONS
+!!    -------------
+!!      Original    10/2003 
+!!      01/2008     C. Lebeaupin Brossier ! initialization of oceanic var. 
+!!                                        ! from MERCATOR analyses types
+!!      07/2012     P. Le Moigne          ! CMO1D phasing
+!!      01/2014     S. Senesi             ! introduce fractional seaice and sea-ice model 
+!!      03/2014     S. Belamari           ! initialize sea surface salinity
+!!      03/2014     M.N. Bouin            ! possibility of wave parameters 
+!!                                        ! from external source
+!-------------------------------------------------------------------------------
+!
+!*       0.    DECLARATIONS
+!              ------------
+!
+USE MODD_PREP_SEAFLUX,   ONLY : CFILE_SEAFLX, CTYPE_SEAFLX, CFILEPGD_SEAFLX, CTYPEPGD, XSST_UNIF,&
+                                XSSS_UNIF, XSIC_UNIF, CFILEWAVE_SEAFLX, CTYPEWAVE
+!
+USE MODN_PREP_SEAFLUX,   ONLY : LSEA_SBL, CSEAICE_SCHEME, LOCEAN_MERCATOR, LOCEAN_CURRENT, &
+                                XTIME_REL, LCUR_REL, LTS_REL,    &
+                                LZERO_FLUX, LCORR_FLUX, XCORFLX, LDIAPYC
+
+USE MODD_SURF_PAR,   ONLY : XUNDEF
+!
+!
+USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
+USE PARKIND1  ,ONLY : JPRB
+!
+IMPLICIT NONE
+!
+!*       0.1   Declarations of arguments
+!              -------------------------
+!
+!
+!
+!*       0.2   Declarations of local variables
+!              -------------------------------
+!
+!-------------------------------------------------------------------------------
+!
+
+REAL(KIND=JPRB) :: ZHOOK_HANDLE
+
+IF (LHOOK) CALL DR_HOOK('DEFAULT_PREP_SEAFLUX',0,ZHOOK_HANDLE)
+CFILE_SEAFLX = '                          '
+CTYPE_SEAFLX = 'GRIB  '
+!
+CFILEWAVE_SEAFLX = '                          '
+CTYPEWAVE       = '      '
+!
+CFILEPGD_SEAFLX = '                          '
+CTYPEPGD        = '      '
+!
+XSST_UNIF = XUNDEF
+XSSS_UNIF = XUNDEF
+XSIC_UNIF = XUNDEF
+!
+LSEA_SBL = .FALSE.
+CSEAICE_SCHEME='NONE  '
+LOCEAN_MERCATOR = .FALSE.
+LOCEAN_CURRENT = .FALSE.
+!
+XTIME_REL  = 25920000.
+XCORFLX    = 0.
+LCUR_REL   = .FALSE.
+LTS_REL    = .FALSE.
+LZERO_FLUX = .FALSE.
+LCORR_FLUX = .FALSE.
+LDIAPYC    = .FALSE.
+!
+IF (LHOOK) CALL DR_HOOK('DEFAULT_PREP_SEAFLUX',1,ZHOOK_HANDLE)
+!
+!-------------------------------------------------------------------------------
+!
+END SUBROUTINE DEFAULT_PREP_SEAFLUX
diff --git a/src/ARCH_SRC/CPL_WAVE/SURFEX/default_seaflux.F90 b/src/ARCH_SRC/CPL_WAVE/SURFEX/default_seaflux.F90
new file mode 100644
index 0000000000000000000000000000000000000000..b951b0d33bbccb161fc975516f6d103c1be56780
--- /dev/null
+++ b/src/ARCH_SRC/CPL_WAVE/SURFEX/default_seaflux.F90
@@ -0,0 +1,112 @@
+!SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence
+!SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!SFX_LIC for details. version 1.
+!     #########
+      SUBROUTINE DEFAULT_SEAFLUX(PTSTEP,POUT_TSTEP,HSEA_ALB,HSEA_FLUX,   &
+                                   OPWG, OPRECIP, OPWEBB, KZ0, KGRVWAVES,&
+                                   OPROGSST, KTIME_COUPLING,POCEAN_TSTEP,&
+                                   PICHCE, HINTERPOL_SST, HINTERPOL_SSS, &
+                                   OWAVEWIND     )
+!     ########################################################################
+!
+!!****  *DEFAULT_SEAFLUX* - routine to set default values for the configuration for SEAFLUX scheme
+!!
+!!    PURPOSE
+!!    -------
+!!
+!!**  METHOD
+!!    ------
+!!
+!!    EXTERNAL
+!!    --------
+!!
+!!
+!!    IMPLICIT ARGUMENTS
+!!    ------------------
+!!
+!!    REFERENCE
+!!    ---------
+!!
+!!
+!!    AUTHOR
+!!    ------
+!!      V. Masson   *Meteo France*
+!!
+!!    MODIFICATIONS
+!!    -------------
+!!      Original    01/2004 
+!!      Modified    01/2006 : sea flux parameterization.
+!!      S. Belamari 03/2014 : add KZ0 (to choose PZ0SEA formulation)
+!!      Modified    03/2014 : M.N. Bouin  ! possibility of wave parameters
+!!                                        ! from external source
+!-------------------------------------------------------------------------------
+!
+!*       0.    DECLARATIONS
+!              ------------
+!
+USE MODD_SURF_PAR,   ONLY : XUNDEF
+!
+!
+USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
+USE PARKIND1  ,ONLY : JPRB
+!
+IMPLICIT NONE
+!
+!*       0.1   Declarations of arguments
+!              -------------------------
+!
+!
+REAL,              INTENT(OUT) :: PTSTEP        ! time step for run
+REAL,              INTENT(OUT) :: POUT_TSTEP    ! time step for writing
+CHARACTER(LEN=6),  INTENT(OUT) :: HSEA_FLUX     ! type of sea scheme
+CHARACTER(LEN=4),  INTENT(OUT) :: HSEA_ALB      ! type of sea albedo
+LOGICAL,           INTENT(OUT) :: OPWG          ! gustiness impact
+LOGICAL,           INTENT(OUT) :: OPRECIP       ! precipitation correction
+LOGICAL,           INTENT(OUT) :: OPWEBB        ! Webb correction
+INTEGER,           INTENT(OUT) :: KZ0           ! PZ0SEA formulation
+INTEGER,           INTENT(OUT) :: KGRVWAVES     ! Wave gravity in roughness length
+LOGICAL,           INTENT(OUT) :: OPROGSST      !two-way 
+INTEGER,           INTENT(OUT) :: KTIME_COUPLING!coupling frequency
+REAL,              INTENT(OUT) :: PICHCE        !CE coef calculation for ECUME
+REAL,              INTENT(OUT) :: POCEAN_TSTEP  !ocean 1D model time-step
+CHARACTER(LEN=6),  INTENT(OUT) :: HINTERPOL_SST ! Quadratic interpolation of monthly SST
+CHARACTER(LEN=6),  INTENT(OUT) :: HINTERPOL_SSS ! Quadratic interpolation of monthly SSS
+LOGICAL,           INTENT(OUT) :: OWAVEWIND     ! wave parameters from wind only
+REAL(KIND=JPRB) :: ZHOOK_HANDLE
+!
+!*       0.2   Declarations of local variables
+!              -------------------------------
+!
+!-------------------------------------------------------------------------------
+!
+IF (LHOOK) CALL DR_HOOK('DEFAULT_SEAFLUX',0,ZHOOK_HANDLE)
+!
+PTSTEP     = XUNDEF
+POUT_TSTEP = XUNDEF
+!
+HSEA_FLUX = "ECUME "
+HSEA_ALB  = "TA96"
+!
+OPWG    = .FALSE.
+OPRECIP = .FALSE. 
+OPWEBB  = .FALSE.
+OWAVEWIND = .TRUE.
+!
+KZ0 = 0
+KGRVWAVES = 0
+!
+OPROGSST = .FALSE.
+KTIME_COUPLING = 300
+POCEAN_TSTEP = 300.
+!
+PICHCE = 0.0
+!
+HINTERPOL_SST = "NONE"
+HINTERPOL_SSS = "NONE"
+!
+IF (LHOOK) CALL DR_HOOK('DEFAULT_SEAFLUX',1,ZHOOK_HANDLE)
+!
+!-------------------------------------------------------------------------------
+!
+END SUBROUTINE DEFAULT_SEAFLUX
diff --git a/src/ARCH_SRC/CPL_WAVE/SURFEX/diag_cpl_esm_sea.F90 b/src/ARCH_SRC/CPL_WAVE/SURFEX/diag_cpl_esm_sea.F90
new file mode 100644
index 0000000000000000000000000000000000000000..1a86c2f31c401a4b7974884acb645ce4f0bfaafd
--- /dev/null
+++ b/src/ARCH_SRC/CPL_WAVE/SURFEX/diag_cpl_esm_sea.F90
@@ -0,0 +1,176 @@
+!SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence
+!SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!SFX_LIC for details. version 1.
+!     #########
+       SUBROUTINE DIAG_CPL_ESM_SEA (S, &
+                                     PTSTEP,PZON10M,PMER10M,PSFU,PSFV,     &
+                                      PSWD,PSWU,PGFLUX,PSFTQ,PRAIN,PSNOW, &
+                                      PLW,PPS,PTICE,PSFTH_ICE,PSFTQ_ICE,  &
+                                      PDIR_SW,PSCA_SW,PSWU_ICE,PLWU_ICE,  &
+                                      OSIC                                )  
+!     ###################################################################
+!
+!!****  *DIAG_CPL_ESM_SEA * - Computes diagnostics over sea for 
+!!                Earth system model coupling or embedded seaice scheme
+!!
+!!    PURPOSE
+!!    -------
+!
+!!**  METHOD
+!!    ------
+!!
+!!    REFERENCE
+!!    ---------
+!!      
+!!
+!!    AUTHOR
+!!    ------
+!!     B. Decharme 
+!!
+!!    MODIFICATIONS
+!!    -------------
+!!      Original    08/2009
+!!      S.Senesi    01/2014  Adapt to embedded seaice scheme (SWU and LWU 
+!!                           for seaice are provided as inputs)
+!!      A.Voldoire  04/2015  Add LCPL_SEAICE test
+!!      Modified    11/2014 : J. Pianezze : Add surface pressure coupling parameter
+!!------------------------------------------------------------------
+!
+!
+USE MODD_SEAFLUX_n, ONLY : SEAFLUX_t
+!
+USE MODD_CSTS,      ONLY : XSTEFAN, XLSTT
+USE MODD_WATER_PAR, ONLY : XEMISWATICE
+!
+USE MODD_SFX_OASIS, ONLY : LCPL_SEAICE
+!
+USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
+USE PARKIND1  ,ONLY : JPRB
+!
+IMPLICIT NONE
+!
+!*      0.1    declarations of arguments
+!
+!
+TYPE(SEAFLUX_t), INTENT(INOUT) :: S
+!
+REAL,               INTENT(IN) :: PTSTEP    ! atmospheric time-step
+REAL, DIMENSION(:), INTENT(IN) :: PZON10M   ! zonal wind
+REAL, DIMENSION(:), INTENT(IN) :: PMER10M   ! meridian wind
+REAL, DIMENSION(:), INTENT(IN) :: PSFU      ! zonal wind stress
+REAL, DIMENSION(:), INTENT(IN) :: PSFV      ! meridian wind stress
+REAL, DIMENSION(:), INTENT(IN) :: PSWD      ! total incoming short wave radiation
+REAL, DIMENSION(:), INTENT(IN) :: PSWU      ! total upward short wave radiation
+REAL, DIMENSION(:), INTENT(IN) :: PGFLUX    ! storage flux
+REAL, DIMENSION(:), INTENT(IN) :: PSFTQ     ! water flux
+REAL, DIMENSION(:), INTENT(IN) :: PRAIN     ! Rainfall
+REAL, DIMENSION(:), INTENT(IN) :: PSNOW     ! Snowfall
+REAL, DIMENSION(:), INTENT(IN) :: PLW       ! longwave radiation (on horizontal surf.)
+REAL, DIMENSION(:), INTENT(IN) :: PPS       ! Surface pressure
+REAL, DIMENSION(:), INTENT(IN) :: PSFTH_ICE ! heat flux  (W/m2)
+REAL, DIMENSION(:), INTENT(IN) :: PSFTQ_ICE ! water flux (kg/m2/s)
+REAL, DIMENSION(:), INTENT(IN) :: PTICE     ! Ice Surface Temperature
+REAL, DIMENSION(:,:),INTENT(IN):: PDIR_SW   ! direct  solar radiation (on horizontal surf.)
+REAL, DIMENSION(:,:),INTENT(IN):: PSCA_SW   ! diffuse solar radiation (on horizontal surf.)
+REAL, DIMENSION(:), INTENT(IN) :: PSWU_ICE  ! upward short wave radiation on seaice
+REAL, DIMENSION(:), INTENT(IN) :: PLWU_ICE  ! upward long  wave radiation on seaice
+LOGICAL,            INTENT(IN) :: OSIC
+!
+!*      0.2    declarations of local variables
+!
+REAL, DIMENSION(SIZE(S%XICE_ALB)) :: ZSWU, ZTICE4
+!
+INTEGER                      :: ISWB ! number of SW bands
+INTEGER                      :: JSWB ! loop counter on number of SW bands
+INTEGER                      :: INI  ! number of points
+INTEGER                      :: JI   ! loop counter on number of points
+!
+REAL(KIND=JPRB) :: ZHOOK_HANDLE
+!
+IF (LHOOK) CALL DR_HOOK('DIAG_CPL_ESM_SEA',0,ZHOOK_HANDLE)
+!
+!-------------------------------------------------------------------------------------
+! Total or free-ice sea flux
+!-------------------------------------------------------------------------------------
+!
+!* 10m wind speed (m)
+!
+S%XCPL_SEA_WIND(:) = S%XCPL_SEA_WIND(:) + PTSTEP * SQRT(PZON10M(:)**2+PMER10M(:)**2)
+! 
+!* wind stress (Pa.s)
+!
+S%XCPL_SEA_FWSU(:) = S%XCPL_SEA_FWSU(:) + PTSTEP * PSFU(:)
+S%XCPL_SEA_FWSV(:) = S%XCPL_SEA_FWSV(:) + PTSTEP * PSFV(:)
+S%XCPL_SEA_FWSM(:) = S%XCPL_SEA_FWSM(:) + PTSTEP * SQRT(PSFU(:)**2+PSFV(:)**2)
+!
+!* Solar net heat flux (J/m2)
+!
+S%XCPL_SEA_SNET(:) = S%XCPL_SEA_SNET(:) + PTSTEP * (PSWD(:) - PSWU(:))
+!
+!* Non solar heat flux (J/m2)
+!
+S%XCPL_SEA_HEAT(:) = S%XCPL_SEA_HEAT(:) + PTSTEP * (PGFLUX(:) + PSWU(:) - PSWD(:)) 
+!
+!* Evaporation (kg/m2)
+!
+S%XCPL_SEA_EVAP(:) = S%XCPL_SEA_EVAP(:) + PTSTEP * PSFTQ(:)
+!
+!* Precip (kg/m2)
+! 
+S%XCPL_SEA_RAIN(:) = S%XCPL_SEA_RAIN(:) + PTSTEP * PRAIN(:)
+S%XCPL_SEA_SNOW(:) = S%XCPL_SEA_SNOW(:) + PTSTEP * PSNOW(:)
+!
+!* Evaporation - Precip (kg/m2)
+! 
+S%XCPL_SEA_EVPR(:) = S%XCPL_SEA_EVPR(:) + S%XCPL_SEA_EVAP(:) - S%XCPL_SEA_RAIN(:) - S%XCPL_SEA_SNOW(:)
+!
+!* Cumulated surface pressure (Pa.s)
+! 
+S%XCPL_SEA_PRES(:) = S%XCPL_SEA_PRES(:) + PTSTEP * PPS(:)
+!
+!-------------------------------------------------------------------------------------
+! Ice flux
+!-------------------------------------------------------------------------------------
+IF (LCPL_SEAICE.OR.OSIC) THEN
+!
+  INI  = SIZE(PDIR_SW,1)
+  ISWB = SIZE(PDIR_SW,2)
+!
+!* Solar net heat flux (J/m2)
+!
+  IF (OSIC) THEN
+    ZSWU(:)=PSWU_ICE(:)
+  ELSE
+    ZSWU(:)=0.0
+    DO JSWB=1,ISWB
+      DO JI=1,INI
+         ZSWU(JI) = ZSWU(JI) + (PDIR_SW(JI,JSWB)+PSCA_SW(JI,JSWB)) * S%XICE_ALB(JI)
+      ENDDO
+    ENDDO
+  ENDIF
+!
+  S%XCPL_SEAICE_SNET(:) = S%XCPL_SEAICE_SNET(:) + PTSTEP * (PSWD(:) - ZSWU(:))
+!
+!* Non solar heat flux (J/m2)
+!
+  IF (OSIC) THEN
+    S%XCPL_SEAICE_HEAT(:) = S%XCPL_SEAICE_HEAT(:) + PTSTEP * &
+              ( PLW(:) - PLWU_ICE(:) - PSFTH_ICE(:) - XLSTT*PSFTQ_ICE(:) )
+  ELSE
+    ZTICE4(:)=PTICE(:)**4
+    S%XCPL_SEAICE_HEAT(:) = S%XCPL_SEAICE_HEAT(:) + PTSTEP * ( XEMISWATICE*(PLW(:)-XSTEFAN*ZTICE4(:)) &
+                                                         - PSFTH_ICE(:) - XLSTT*PSFTQ_ICE(:)      ) 
+  ENDIF 
+!
+!* Sublimation (kg/m2)
+!
+  S%XCPL_SEAICE_EVAP(:) = S%XCPL_SEAICE_EVAP(:) + PTSTEP * PSFTQ_ICE(:)
+!
+ENDIF
+!
+IF (LHOOK) CALL DR_HOOK('DIAG_CPL_ESM_SEA',1,ZHOOK_HANDLE)
+!
+!-------------------------------------------------------------------------------------
+!
+END SUBROUTINE DIAG_CPL_ESM_SEA
diff --git a/src/ARCH_SRC/CPL_WAVE/SURFEX/diag_inline_seafluxn.F90 b/src/ARCH_SRC/CPL_WAVE/SURFEX/diag_inline_seafluxn.F90
new file mode 100644
index 0000000000000000000000000000000000000000..fb5cc3c34b54a0fd62e3bb0bb47bb9cd47d3b190
--- /dev/null
+++ b/src/ARCH_SRC/CPL_WAVE/SURFEX/diag_inline_seafluxn.F90
@@ -0,0 +1,337 @@
+!SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence
+!SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!SFX_LIC for details. version 1.
+!     #########
+SUBROUTINE DIAG_INLINE_SEAFLUX_n (DGS, DGSI, S, &
+                                  PTSTEP, PTA, PQA, &
+     PPA, PPS, PRHOA, PZONA,                             &
+     PMERA, PHT, PHW, PCD, PCDN, PCH, PCE, PRI, PHU,     &
+     PZ0H, PQSAT, PSFTH, PSFTQ, PSFZON, PSFMER,     &
+     PDIR_SW, PSCA_SW, PLW, PDIR_ALB, PSCA_ALB, &
+     PEMIS, PTRAD, PRAIN, PSNOW,                         & 
+     PCD_ICE, PCDN_ICE, PCH_ICE, PCE_ICE, PRI_ICE,       &
+     PZ0_ICE, PZ0H_ICE, PQSAT_ICE, PSFTH_ICE, PSFTQ_ICE, &
+     PSFZON_ICE, PSFMER_ICE )
+                                          
+!     #####################################################################################
+!
+!!****  *DIAG_INLINE_SEAFLUX_n * - computes diagnostics during SEAFLUX time-step
+!!
+!!    PURPOSE
+!!    -------
+!
+!!**  METHOD
+!!    ------
+!!
+!!    REFERENCE
+!!    ---------
+!!      
+!!
+!!    AUTHOR
+!!    ------
+!!     V. Masson 
+!!
+!!    MODIFICATIONS
+!!    -------------
+!!      Original    01/2004
+!!      Modified    01/2006 : sea flux parameterization.
+!!      B. Decharme 08/2009 : Diag for Earth System Model Coupling
+!!      S. Riette   06/2009 CLS_2M becomes CLS_TQ, CLS_TQ and CLS_WIND have one
+!!                          more argument (height of diagnostic)
+!!      B. Decharme 04/2013 : Add EVAP and SUBL diag
+!!      S. Senesi   01/2014 ! introduce fractional seaice and sea-ice model 
+!!      J. Pianezze 08/2016 : Add surface pressure coupling parameter
+!!------------------------------------------------------------------
+!
+
+!
+!
+!
+USE MODD_DIAG_SEAFLUX_n, ONLY : DIAG_SEAFLUX_t
+USE MODD_DIAG_SEAICE_n, ONLY : DIAG_SEAICE_t
+USE MODD_SEAFLUX_n, ONLY : SEAFLUX_t
+!
+USE MODD_CSTS,           ONLY : XTTS
+USE MODD_SURF_PAR,       ONLY : XUNDEF
+USE MODD_SFX_OASIS,      ONLY : LCPL_SEA
+!
+USE MODD_TYPES_GLT,     ONLY : T_GLT
+USE MODD_GLT_PARAM ,    ONLY : GELATO_DIM=>NX
+USE MODE_GLT_STATS ,    ONLY : GLT_AVHICEM, GLT_AVHSNWM
+USE MODI_PARAM_CLS
+USE MODI_CLS_TQ
+USE MODI_CLS_WIND
+USE MODI_DIAG_SURF_BUDGET_SEA
+USE MODI_DIAG_SURF_BUDGETC_SEA
+USE MODI_DIAG_CPL_ESM_SEA
+!
+USE MODI_SEAFLUX_ALBEDO
+!
+USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
+USE PARKIND1  ,ONLY : JPRB
+!
+IMPLICIT NONE
+!
+!*      0.1    declarations of arguments
+!
+!
+TYPE(DIAG_SEAFLUX_t), INTENT(INOUT) :: DGS
+TYPE(DIAG_SEAICE_t), INTENT(INOUT) :: DGSI
+TYPE(SEAFLUX_t), INTENT(INOUT) :: S
+!
+REAL,               INTENT(IN) :: PTSTEP ! atmospheric time-step                 (s)
+REAL, DIMENSION(:), INTENT(IN) :: PTA    ! atmospheric temperature
+REAL, DIMENSION(:), INTENT(IN) :: PQA    ! atmospheric specific humidity
+REAL, DIMENSION(:), INTENT(IN) :: PPA    ! atmospheric level pressure
+REAL, DIMENSION(:), INTENT(IN) :: PPS    ! surface pressure
+REAL, DIMENSION(:), INTENT(IN) :: PRHOA  ! air density
+REAL, DIMENSION(:), INTENT(IN) :: PZONA  ! zonal wind
+REAL, DIMENSION(:), INTENT(IN) :: PMERA  ! meridian wind
+REAL, DIMENSION(:), INTENT(IN) :: PHT    ! atmospheric level height
+REAL, DIMENSION(:), INTENT(IN) :: PHW    ! atmospheric level height for wind
+REAL, DIMENSION(:), INTENT(IN) :: PCD    ! drag coefficient for momentum
+REAL, DIMENSION(:), INTENT(IN) :: PCDN   ! neutral drag coefficient
+REAL, DIMENSION(:), INTENT(IN) :: PCH    ! drag coefficient for heat
+REAL, DIMENSION(:), INTENT(IN) :: PCE    ! drag coefficient for vapor
+REAL, DIMENSION(:), INTENT(IN) :: PRI    ! Richardson number
+REAL, DIMENSION(:), INTENT(IN) :: PHU    ! near-surface humidity
+REAL, DIMENSION(:), INTENT(IN) :: PZ0H   ! roughness length for heat
+REAL, DIMENSION(:), INTENT(IN) :: PQSAT  ! humidity at saturation
+REAL, DIMENSION(:), INTENT(IN) :: PSFZON ! zonal friction
+REAL, DIMENSION(:), INTENT(IN) :: PSFMER ! meridian friction
+REAL, DIMENSION(:), INTENT(IN) :: PSFTH  ! heat flux  (W/m2)
+REAL, DIMENSION(:), INTENT(IN) :: PSFTQ  ! water flux (kg/m2/s)
+REAL, DIMENSION(:,:),INTENT(IN):: PDIR_SW   ! direct  solar radiation (on horizontal surf.)
+!                                           !                                       (W/m2)
+REAL, DIMENSION(:,:),INTENT(IN):: PSCA_SW   ! diffuse solar radiation (on horizontal surf.)
+!                                           !                                       (W/m2)
+REAL, DIMENSION(:), INTENT(IN) :: PLW       ! longwave radiation (on horizontal surf.)
+REAL, DIMENSION(:), INTENT(IN) :: PTRAD     ! radiative temperature                 (K)
+REAL, DIMENSION(:,:),INTENT(IN):: PDIR_ALB  ! direct albedo for each spectral band  (-)
+REAL, DIMENSION(:,:),INTENT(IN):: PSCA_ALB  ! diffuse albedo for each spectral band (-)
+REAL, DIMENSION(:), INTENT(IN) :: PEMIS     ! emissivity                            (-)
+!
+REAL, DIMENSION(:), INTENT(IN) :: PRAIN     ! Rainfall (kg/m2/s)
+REAL, DIMENSION(:), INTENT(IN) :: PSNOW     ! Snowfall (kg/m2/s)
+!
+REAL, DIMENSION(:), INTENT(IN)    :: PCD_ICE    ! drag coefficient for momentum
+REAL, DIMENSION(:), INTENT(IN)    :: PCDN_ICE   ! neutral drag coefficient
+REAL, DIMENSION(:), INTENT(IN)    :: PCH_ICE    ! drag coefficient for heat
+REAL, DIMENSION(:), INTENT(IN)    :: PCE_ICE    ! drag coefficient for vapor
+REAL, DIMENSION(:), INTENT(IN)    :: PRI_ICE    ! Richardson number
+REAL, DIMENSION(:), INTENT(IN)    :: PZ0_ICE    ! roughness length for momentum
+REAL, DIMENSION(:), INTENT(IN)    :: PZ0H_ICE   ! roughness length for heat
+REAL, DIMENSION(:), INTENT(IN)    :: PQSAT_ICE  ! humidity at saturation
+REAL, DIMENSION(:), INTENT(IN)    :: PSFTH_ICE  ! heat flux  (W/m2)
+REAL, DIMENSION(:), INTENT(IN)    :: PSFTQ_ICE  ! water flux (kg/m2/s)
+REAL, DIMENSION(:), INTENT(IN)    :: PSFZON_ICE ! zonal friction
+REAL, DIMENSION(:), INTENT(IN)    :: PSFMER_ICE ! meridian friction
+!
+!*      0.2    declarations of local variables
+!
+LOGICAL                         :: GSIC
+REAL, DIMENSION(SIZE(PTA))      :: ZZ0W
+REAL, DIMENSION(SIZE(PTA))      :: ZH
+!
+REAL(KIND=JPRB) :: ZHOOK_HANDLE
+!-------------------------------------------------------------------------------------
+!
+IF (LHOOK) CALL DR_HOOK('DIAG_INLINE_SEAFLUX_N',0,ZHOOK_HANDLE)
+!
+! * Mean surface temperature need to couple with AGCM
+!
+IF (S%LHANDLE_SIC) THEN
+   DGS%XTS   (:) = (1 - S%XSIC(:)) * S%XSST(:) + S%XSIC(:) * S%XTICE(:)
+   DGS%XTSRAD(:) = PTRAD(:)
+ELSE
+   DGS%XTS   (:) = S%XSST (:)
+   DGS%XTSRAD(:) = PTRAD(:)
+ENDIF
+!
+IF (.NOT. S%LSBL) THEN
+!
+  IF (DGS%N2M==1) THEN        
+    CALL PARAM_CLS(PTA, S%XSST, PQA, PPA, PRHOA, PZONA, PMERA, PHT, PHW, &
+         PSFTH, PSFTQ, PSFZON, PSFMER,                                 &
+         DGS%XT2M, DGS%XQ2M, DGS%XHU2M, DGS%XZON10M, DGS%XMER10M )  
+    IF (S%LHANDLE_SIC) THEN
+       CALL PARAM_CLS(PTA, S%XTICE, PQA, PPA, PRHOA, PZONA, PMERA, PHT, PHW, &
+            PSFTH_ICE, PSFTQ_ICE, PSFZON_ICE, PSFMER_ICE,                  &
+            DGS%XT2M_ICE, DGS%XQ2M_ICE, DGS%XHU2M_ICE, DGS%XZON10M_ICE, DGS%XMER10M_ICE  )  
+    ENDIF
+  ELSE IF (DGS%N2M==2) THEN
+    ZH(:)=2.          
+    CALL CLS_TQ(PTA, PQA, PPA, PPS, PHT,          &
+                  PCD, PCH, PRI,                  &
+                  S%XSST, PHU, PZ0H, ZH,            &
+                  DGS%XT2M, DGS%XQ2M, DGS%XHU2M)
+    ZH(:)=10.                
+    CALL CLS_WIND(PZONA, PMERA, PHW,              &
+                    PCD, PCDN, PRI, ZH,           &
+                    DGS%XZON10M, DGS%XMER10M)  
+    IF (S%LHANDLE_SIC) THEN
+       ZH(:)=2.          
+       CALL CLS_TQ(PTA, PQA, PPA, PPS, PHT,  &
+            PCD_ICE, PCH_ICE, PRI_ICE,       &
+            S%XTICE, PHU, PZ0H_ICE, ZH,        &
+            DGS%XT2M_ICE, DGS%XQ2M_ICE, DGS%XHU2M_ICE)  
+       ZH(:)=10.                
+       CALL CLS_WIND(PZONA, PMERA, PHW,      &
+            PCD_ICE, PCDN_ICE, PRI_ICE, ZH,  &
+            DGS%XZON10M_ICE, DGS%XMER10M_ICE  )  
+    ENDIF 
+  END IF
+!
+  IF (DGS%N2M>=1) THEN
+     IF (S%LHANDLE_SIC) THEN
+        !
+        DGS%XT2M    = DGS%XT2M    * (1 - S%XSIC) + DGS%XT2M_ICE    * S%XSIC
+        DGS%XQ2M    = DGS%XQ2M    * (1 - S%XSIC) + DGS%XQ2M_ICE    * S%XSIC
+        DGS%XHU2M   = DGS%XHU2M   * (1 - S%XSIC) + DGS%XHU2M_ICE   * S%XSIC
+        !
+        DGS%XZON10M(:) = DGS%XZON10M(:) * (1 - S%XSIC(:)) + DGS%XZON10M_ICE(:) * S%XSIC(:)
+        DGS%XMER10M(:) = DGS%XMER10M(:) * (1 - S%XSIC(:)) + DGS%XMER10M_ICE(:) * S%XSIC(:)
+        DGS%XWIND10M_ICE(:) = SQRT(DGS%XZON10M_ICE(:)**2+DGS%XMER10M_ICE(:)**2)
+        !
+        DGS%XRI    = PRI     * (1 - S%XSIC) + PRI_ICE     * S%XSIC
+        DGS%XRI_ICE=PRI_ICE
+     ELSE
+        DGS%XRI    =PRI
+     ENDIF
+    !
+    DGS%XT2M_MIN(:) = MIN(DGS%XT2M_MIN(:),DGS%XT2M(:))
+    DGS%XT2M_MAX(:) = MAX(DGS%XT2M_MAX(:),DGS%XT2M(:))
+    !
+    DGS%XHU2M_MIN(:) = MIN(DGS%XHU2M_MIN(:),DGS%XHU2M(:))
+    DGS%XHU2M_MAX(:) = MAX(DGS%XHU2M_MAX(:),DGS%XHU2M(:))
+    !
+    DGS%XWIND10M(:) = SQRT(DGS%XZON10M(:)**2+DGS%XMER10M(:)**2)
+    DGS%XWIND10M_MAX(:) = MAX(DGS%XWIND10M_MAX(:),DGS%XWIND10M(:))
+    !
+  ENDIF
+!
+ELSE
+  IF (DGS%N2M>=1) THEN
+    DGS%XT2M    = XUNDEF
+    DGS%XQ2M    = XUNDEF
+    DGS%XHU2M   = XUNDEF
+    DGS%XZON10M = XUNDEF
+    DGS%XMER10M = XUNDEF
+    DGS%XRI     = PRI
+  ENDIF
+ENDIF
+!
+IF (DGS%LSURF_BUDGET.OR.DGS%LSURF_BUDGETC) THEN
+!
+  CALL SEAFLUX_ALBEDO(PDIR_SW,PSCA_SW,PDIR_ALB,PSCA_ALB,DGS%XALBT)
+!
+  CALL DIAG_SURF_BUDGET_SEA   (XTTS, S%XSST, PRHOA, PSFTH, PSFTH_ICE,    &
+                                 PSFTQ, PSFTQ_ICE,                     &
+                                 PDIR_SW, PSCA_SW, PLW, PDIR_ALB,      &
+                                 PSCA_ALB,S%XICE_ALB, PEMIS, PTRAD,      &
+                                 PSFZON, PSFZON_ICE, PSFMER,           &
+                                 PSFMER_ICE, S%LHANDLE_SIC, S%XSIC, S%XTICE, &
+                                 DGS%XRN, DGS%XH, DGS%XLE, DGS%XLE_ICE, DGS%XGFLUX,        &
+                                 DGS%XSWD, DGS%XSWU, DGS%XSWBD, DGS%XSWBU, DGS%XLWD, DGS%XLWU, &
+                                 DGS%XFMU, DGS%XFMV, DGS%XEVAP, DGS%XSUBL,             &
+                                 DGS%XRN_ICE, DGS%XH_ICE, DGS%XGFLUX_ICE,          &
+                                 DGS%XSWU_ICE, DGS%XSWBU_ICE, DGS%XLWU_ICE,        &
+                                 DGS%XFMU_ICE, DGS%XFMV_ICE                    ) 
+!
+END IF
+!
+IF(DGS%LSURF_BUDGETC)THEN
+  CALL DIAG_SURF_BUDGETC_SEA(DGS, &
+                             PTSTEP, DGS%XRN, DGS%XH, DGS%XLE, DGS%XLE_ICE, DGS%XGFLUX,  &
+                               DGS%XSWD, DGS%XSWU, DGS%XLWD, DGS%XLWU, DGS%XFMU, DGS%XFMV,   &
+                               DGS%XEVAP, DGS%XSUBL, S%LHANDLE_SIC,            &
+                               DGS%XRN_ICE, DGS%XH_ICE, DGS%XGFLUX_ICE,          &
+                               DGS%XSWU_ICE, DGS%XLWU_ICE, DGS%XFMU_ICE, DGS%XFMV_ICE)
+ENDIF
+!
+IF (DGS%LCOEF) THEN
+   IF (S%LHANDLE_SIC) THEN 
+      !
+      !* Transfer coefficients
+      !
+      DGS%XCD = (1 - S%XSIC) * PCD + S%XSIC * PCD_ICE
+      DGS%XCH = (1 - S%XSIC) * PCH + S%XSIC * PCH_ICE
+      DGS%XCE = (1 - S%XSIC) * PCE + S%XSIC * PCE_ICE
+      !
+      !* Roughness lengths
+      !
+      ZZ0W = ( 1 - S%XSIC ) * 1.0/(LOG(PHW/S%XZ0)    **2)  +  &
+                   S%XSIC   * 1.0/(LOG(PHW/PZ0_ICE)**2)  
+      DGS%XZ0  = PHW  * EXP ( - SQRT ( 1./  ZZ0W ))
+      ZZ0W = ( 1 - S%XSIC ) * 1.0/(LOG(PHW/PZ0H)    **2)  +  &
+                   S%XSIC   * 1.0/(LOG(PHW/PZ0H_ICE)**2)  
+      DGS%XZ0H = PHW  * EXP ( - SQRT ( 1./  ZZ0W ))
+
+      DGS%XCD_ICE  = PCD_ICE
+      DGS%XCH_ICE  = PCH_ICE
+      DGS%XZ0_ICE  = PZ0_ICE
+      DGS%XZ0H_ICE = PZ0H_ICE
+      !
+   ELSE
+      !
+      !* Transfer coefficients
+      !
+      DGS%XCD = PCD
+      DGS%XCH = PCH
+      DGS%XCE = PCE
+      !
+      !* Roughness lengths
+      !
+      DGS%XZ0  = S%XZ0
+      DGS%XZ0H = PZ0H
+   ENDIF
+   !
+ENDIF
+!
+IF (DGS%LSURF_VARS) THEN
+  !
+  !* Humidity at saturation
+  !
+   IF (S%LHANDLE_SIC) THEN 
+      DGS%XQS     = (1 - S%XSIC) * PQSAT + S%XSIC * PQSAT_ICE
+      DGS%XQS_ICE = PQSAT_ICE
+   ELSE 
+      DGS%XQS = PQSAT
+   ENDIF
+ENDIF
+!
+! Diags from embedded Seaice model
+! CALL DIAG_INLINE_SEAICE() : simply  : 
+!
+IF (DGSI%LDIAG_SEAICE) THEN
+   IF (TRIM(S%CSEAICE_SCHEME) == 'GELATO') THEN 
+      GELATO_DIM=SIZE(PTA)
+      DGSI%XSIT  = RESHAPE(glt_avhicem(S%TGLT%dom,S%TGLT%sit),(/GELATO_DIM/))
+      DGSI%XSND  = RESHAPE(glt_avhsnwm(S%TGLT%dom,S%TGLT%sit),(/GELATO_DIM/))
+      DGSI%XMLT  = S%TGLT%oce_all(:,1)%tml
+   ELSE
+      ! Placeholder for an alternate seaice scheme
+   ENDIF
+ENDIF
+!
+! Diags for Earth System Model coupling or for embedded Seaice model
+! (we are actually using XCPL_.. variables for feeding the seaice model)
+!
+GSIC=(S%LHANDLE_SIC.AND.(S%CSEAICE_SCHEME /= 'NONE  '))
+!
+IF (LCPL_SEA.OR.GSIC) THEN
+!
+  CALL DIAG_CPL_ESM_SEA(S, &
+                        PTSTEP,DGS%XZON10M,DGS%XMER10M,DGS%XFMU,DGS%XFMV,  &
+                          DGS%XSWD,DGS%XSWU,DGS%XGFLUX,PSFTQ,PRAIN,    &
+                          PSNOW,PLW,PPS,S%XTICE,PSFTH_ICE,       &
+                          PSFTQ_ICE,PDIR_SW,PSCA_SW,       &
+                          DGS%XSWU_ICE,DGS%XLWU_ICE,GSIC           )
+! 
+ENDIF
+IF (LHOOK) CALL DR_HOOK('DIAG_INLINE_SEAFLUX_N',1,ZHOOK_HANDLE)
+!
+!-------------------------------------------------------------------------------------
+!
+END SUBROUTINE DIAG_INLINE_SEAFLUX_n
diff --git a/src/ARCH_SRC/CPL_WAVE/SURFEX/diag_seaflux_initn.F90 b/src/ARCH_SRC/CPL_WAVE/SURFEX/diag_seaflux_initn.F90
new file mode 100644
index 0000000000000000000000000000000000000000..f822e8e2a95261fb6d641288ec793601fbd12f14
--- /dev/null
+++ b/src/ARCH_SRC/CPL_WAVE/SURFEX/diag_seaflux_initn.F90
@@ -0,0 +1,545 @@
+!SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence
+!SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!SFX_LIC for details. version 1.
+!     #########
+      SUBROUTINE DIAG_SEAFLUX_INIT_n (&
+                                       DGO, DGS, DGSI, DGU, S, &
+                                      HPROGRAM,KLU,KSW)
+!     #####################
+!
+!!****  *DIAG_SEAFLUX_INIT_n* - routine to initialize SEAFLUX diagnostic variables
+!!
+!!    PURPOSE
+!!    -------
+!!
+!!**  METHOD
+!!    ------
+!!
+!!    EXTERNAL
+!!    --------
+!!
+!!
+!!    IMPLICIT ARGUMENTS
+!!    ------------------
+!!
+!!    REFERENCE
+!!    ---------
+!!
+!!
+!!    AUTHOR
+!!    ------
+!!      V. Masson   *Meteo France*
+!!
+!!    MODIFICATIONS
+!!    -------------
+!!      Original    01/2004 
+!!      Modified    01/2006 : sea flux parameterization.
+!!      Modified    08/2009 : cumulative sea flux 
+!!      B. decharme 04/2013 : Add EVAP and SUBL diag
+!!      S.Senesi    01/2014 : introduce fractional seaice 
+!!      Modified    11/2014 : J. Pianezze : Add surface pressure coupling parameter
+!-------------------------------------------------------------------------------
+!
+!*       0.    DECLARATIONS
+!              ------------
+!
+!
+!
+USE MODD_DIAG_OCEAN_n, ONLY : DIAG_OCEAN_t
+USE MODD_DIAG_SEAFLUX_n, ONLY : DIAG_SEAFLUX_t
+USE MODD_DIAG_SEAICE_n, ONLY : DIAG_SEAICE_t
+USE MODD_DIAG_SURF_ATM_n, ONLY : DIAG_SURF_ATM_t
+USE MODD_SEAFLUX_n, ONLY : SEAFLUX_t
+!
+!
+!
+#ifdef SFX_OL
+USE MODN_IO_OFFLINE,     ONLY : LRESTART
+#endif
+USE MODD_SURF_PAR,       ONLY : XUNDEF
+USE MODD_SFX_OASIS,      ONLY : LCPL_SEA,LCPL_SEAICE
+
+!                                
+!
+!
+!
+USE MODI_READ_SURF
+!
+!
+USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
+USE PARKIND1  ,ONLY : JPRB
+!
+IMPLICIT NONE
+!
+!*       0.1   Declarations of arguments
+!              -------------------------
+!
+!
+!
+!
+TYPE(DIAG_OCEAN_t), INTENT(INOUT) :: DGO
+TYPE(DIAG_SEAFLUX_t), INTENT(INOUT) :: DGS
+TYPE(DIAG_SEAICE_t), INTENT(INOUT) :: DGSI
+TYPE(DIAG_SURF_ATM_t), INTENT(INOUT) :: DGU
+TYPE(SEAFLUX_t), INTENT(INOUT) :: S
+!
+INTEGER, INTENT(IN) :: KLU   ! size of arrays
+INTEGER, INTENT(IN) :: KSW   ! number of SW spectral bands
+ CHARACTER(LEN=6), INTENT(IN):: HPROGRAM  ! program calling
+!
+!*       0.2   Declarations of local variables
+!              -------------------------------
+!
+INTEGER           :: IVERSION
+INTEGER           :: IRESP          ! IRESP  : return-code if a problem appears
+ CHARACTER(LEN=12) :: YREC           ! Name of the article to be read
+!
+REAL(KIND=JPRB)   :: ZHOOK_HANDLE
+!
+!-------------------------------------------------------------------------------
+!
+!* surface energy budget
+!
+IF (LHOOK) CALL DR_HOOK('DIAG_SEAFLUX_INIT_N',0,ZHOOK_HANDLE)
+ALLOCATE(DGS%XTS   (KLU))
+ALLOCATE(DGS%XTSRAD(KLU))
+DGS%XTS    = XUNDEF
+DGS%XTSRAD = XUNDEF
+!
+IF (DGS%LSURF_BUDGET.OR.DGS%LSURF_BUDGETC) THEN
+  ALLOCATE(DGS%XRN     (KLU))
+  ALLOCATE(DGS%XRN_ICE (KLU))
+  ALLOCATE(DGS%XH      (KLU))
+  ALLOCATE(DGS%XH_ICE  (KLU))
+  ALLOCATE(DGS%XLE     (KLU))
+  ALLOCATE(DGS%XLE_ICE (KLU))
+  ALLOCATE(DGS%XGFLUX  (KLU))
+  ALLOCATE(DGS%XGFLUX_ICE(KLU))
+  ALLOCATE(DGS%XEVAP   (KLU))
+  ALLOCATE(DGS%XSUBL   (KLU))
+  ALLOCATE(DGS%XSWD    (KLU))
+  ALLOCATE(DGS%XSWU    (KLU))
+  ALLOCATE(DGS%XSWU_ICE(KLU))
+  ALLOCATE(DGS%XLWD    (KLU))
+  ALLOCATE(DGS%XLWU    (KLU))
+  ALLOCATE(DGS%XLWU_ICE(KLU))
+  ALLOCATE(DGS%XSWBD   (KLU,KSW))
+  ALLOCATE(DGS%XSWBU   (KLU,KSW))
+  ALLOCATE(DGS%XSWBU_ICE(KLU,KSW))
+  ALLOCATE(DGS%XFMU    (KLU))
+  ALLOCATE(DGS%XFMU_ICE(KLU))
+  ALLOCATE(DGS%XFMV    (KLU))
+  ALLOCATE(DGS%XFMV_ICE(KLU))
+  ALLOCATE(DGS%XALBT   (KLU))  
+  !
+  DGS%XRN      = XUNDEF
+  DGS%XRN_ICE  = XUNDEF
+  DGS%XH       = XUNDEF
+  DGS%XH_ICE   = XUNDEF
+  DGS%XLE      = XUNDEF
+  DGS%XLE_ICE  = XUNDEF
+  DGS%XGFLUX   = XUNDEF
+  DGS%XGFLUX_ICE=XUNDEF
+  DGS%XEVAP    = XUNDEF
+  DGS%XSUBL    = XUNDEF  
+  DGS%XSWD     = XUNDEF
+  DGS%XSWU     = XUNDEF
+  DGS%XSWU_ICE = XUNDEF
+  DGS%XLWD     = XUNDEF
+  DGS%XLWU     = XUNDEF
+  DGS%XLWU_ICE = XUNDEF
+  DGS%XSWBD    = XUNDEF
+  DGS%XSWBU    = XUNDEF
+  DGS%XSWBU_ICE= XUNDEF
+  DGS%XFMU     = XUNDEF
+  DGS%XFMU_ICE = XUNDEF
+  DGS%XFMV     = XUNDEF
+  DGS%XFMV_ICE = XUNDEF
+  DGS%XALBT    = XUNDEF  
+  !
+ELSE
+  ALLOCATE(DGS%XRN     (0))
+  ALLOCATE(DGS%XRN_ICE (0))
+  ALLOCATE(DGS%XH      (0))
+  ALLOCATE(DGS%XH_ICE  (0))
+  ALLOCATE(DGS%XLE     (0))
+  ALLOCATE(DGS%XLE_ICE (0))
+  ALLOCATE(DGS%XGFLUX  (0))
+  ALLOCATE(DGS%XGFLUX_ICE(0))
+  ALLOCATE(DGS%XEVAP   (0))
+  ALLOCATE(DGS%XSUBL   (0))  
+  ALLOCATE(DGS%XSWD    (0))
+  ALLOCATE(DGS%XSWU    (0))
+  ALLOCATE(DGS%XSWU_ICE(0))
+  ALLOCATE(DGS%XLWD    (0))
+  ALLOCATE(DGS%XLWU    (0))
+  ALLOCATE(DGS%XLWU_ICE(0))
+  ALLOCATE(DGS%XSWBD   (0,0))
+  ALLOCATE(DGS%XSWBU   (0,0))
+  ALLOCATE(DGS%XSWBU_ICE(0,0))
+  ALLOCATE(DGS%XFMU    (0))
+  ALLOCATE(DGS%XFMU_ICE(0))
+  ALLOCATE(DGS%XFMV    (0))
+  ALLOCATE(DGS%XFMV_ICE(0))
+  ALLOCATE(DGS%XALBT   (0))  
+ENDIF
+!
+!* cumulative surface energy budget
+!
+#ifdef SFX_OL
+IF (DGS%LSURF_BUDGETC .OR. (LRESTART .AND. .NOT.DGS%LRESET_BUDGETC)) THEN
+#else
+IF (DGS%LSURF_BUDGETC .OR. .NOT.DGS%LRESET_BUDGETC) THEN
+#endif
+!        
+  ALLOCATE(DGS%XRNC    (KLU))
+  ALLOCATE(DGS%XRNC_ICE(KLU))
+  ALLOCATE(DGS%XHC     (KLU))
+  ALLOCATE(DGS%XHC_ICE (KLU))
+  ALLOCATE(DGS%XLEC    (KLU))
+  ALLOCATE(DGS%XLEC_ICE(KLU))
+  ALLOCATE(DGS%XGFLUXC (KLU))
+  ALLOCATE(DGS%XGFLUXC_ICE(KLU))
+  ALLOCATE(DGS%XEVAPC  (KLU))
+  ALLOCATE(DGS%XSUBLC  (KLU))  
+  ALLOCATE(DGS%XSWDC   (KLU))
+  ALLOCATE(DGS%XSWUC   (KLU))
+  ALLOCATE(DGS%XSWUC_ICE(KLU))
+  ALLOCATE(DGS%XLWDC   (KLU))
+  ALLOCATE(DGS%XLWUC   (KLU))
+  ALLOCATE(DGS%XLWUC_ICE(KLU))
+  ALLOCATE(DGS%XFMUC   (KLU))
+  ALLOCATE(DGS%XFMUC_ICE(KLU))
+  ALLOCATE(DGS%XFMVC   (KLU))
+  ALLOCATE(DGS%XFMVC_ICE(KLU))
+!
+  IF (.NOT. DGU%LREAD_BUDGETC) THEN        
+     DGS%XRNC    = 0.0
+     DGS%XRNC_ICE =0.0
+     DGS%XHC     = 0.0
+     DGS%XHC_ICE  =0.0
+     DGS%XLEC    = 0.0
+     DGS%XLEC_ICE= 0.0
+     DGS%XGFLUXC = 0.0
+     DGS%XGFLUXC_ICE=0.0
+     DGS%XEVAPC  = 0.0
+     DGS%XSUBLC  = 0.0
+     DGS%XSWDC   = 0.0
+     DGS%XSWUC   = 0.0
+     DGS%XSWUC_ICE=0.0
+     DGS%XLWDC   = 0.0
+     DGS%XLWUC   = 0.0
+     DGS%XLWUC_ICE=0.0
+     DGS%XFMUC   = 0.0
+     DGS%XFMUC_ICE=0.0
+     DGS%XFMVC   = 0.0
+     DGS%XFMVC_ICE=0.0
+  ELSEIF (DGU%LREAD_BUDGETC.AND.DGS%LRESET_BUDGETC) THEN
+     DGS%XRNC    = 0.0
+     DGS%XRNC_ICE= 0.0
+     DGS%XHC     = 0.0
+     DGS%XHC_ICE = 0.0
+     DGS%XLEC    = 0.0
+     DGS%XLEC_ICE= 0.0
+     DGS%XGFLUXC = 0.0
+     DGS%XGFLUXC_ICE=0.0
+     DGS%XEVAPC  = 0.0
+     DGS%XSUBLC  = 0.0     
+     DGS%XSWDC   = 0.0
+     DGS%XSWUC   = 0.0
+     DGS%XSWUC_ICE=0.0
+     DGS%XLWDC   = 0.0
+     DGS%XLWUC   = 0.0
+     DGS%XLWUC_ICE=0.0
+     DGS%XFMUC   = 0.0
+     DGS%XFMUC_ICE=0.0
+     DGS%XFMVC   = 0.0
+     DGS%XFMVC_ICE=0.0
+  ELSE
+     CALL READ_SURF(&
+                    HPROGRAM,'VERSION',IVERSION,IRESP)    
+     YREC='RNC_SEA'
+     CALL READ_SURF(&
+                    HPROGRAM,YREC,DGS%XRNC,IRESP)
+     YREC='HC_SEA'
+     CALL READ_SURF(&
+                    HPROGRAM,YREC,DGS%XHC ,IRESP)
+     YREC='LEC_SEA'
+     CALL READ_SURF(&
+                    HPROGRAM,YREC,DGS%XLEC,IRESP)
+     YREC='LEIC_SEA'
+     CALL READ_SURF(&
+                    HPROGRAM,YREC,DGS%XLEC_ICE,IRESP) 
+     YREC='GFLUXC_SEA'
+     CALL READ_SURF(&
+                    HPROGRAM,YREC,DGS%XGFLUXC ,IRESP)
+     YREC='SWDC_SEA'
+     CALL READ_SURF(&
+                    HPROGRAM,YREC,DGS%XSWDC,IRESP)
+     YREC='SWUC_SEA'
+     CALL READ_SURF(&
+                    HPROGRAM,YREC,DGS%XSWUC,IRESP)
+     YREC='LWDC_SEA'
+     CALL READ_SURF(&
+                    HPROGRAM,YREC,DGS%XLWDC,IRESP)
+     YREC='LWUC_SEA'
+     CALL READ_SURF(&
+                    HPROGRAM,YREC,DGS%XLWUC,IRESP)
+     YREC='FMUC_SEA'
+     CALL READ_SURF(&
+                    HPROGRAM,YREC,DGS%XFMUC,IRESP)
+     YREC='FMVC_SEA'
+     CALL READ_SURF(&
+                    HPROGRAM,YREC,DGS%XFMVC,IRESP)
+     IF (IVERSION<8)THEN
+        DGS%XEVAPC      = 0.0
+        DGS%XSUBLC      = 0.0              
+     ELSE
+        !
+        YREC='EVAPC_SEA'
+        CALL READ_SURF(&
+                    HPROGRAM,YREC,DGS%XEVAPC,IRESP)
+        YREC='SUBLC_SEA'
+        CALL READ_SURF(&
+                    HPROGRAM,YREC,DGS%XSUBLC,IRESP)
+     ENDIF
+     DGS%XRNC_ICE    = 0.0
+     DGS%XHC_ICE     = 0.0
+     DGS%XGFLUXC_ICE = 0.0
+     DGS%XSWUC_ICE   = 0.0
+     DGS%XLWUC_ICE   = 0.0
+     DGS%XFMUC_ICE   = 0.0
+     DGS%XFMVC_ICE   = 0.0
+  ENDIF   
+ELSE
+  ALLOCATE(DGS%XRNC    (0))
+  ALLOCATE(DGS%XRNC_ICE(0))
+  ALLOCATE(DGS%XHC     (0))
+  ALLOCATE(DGS%XHC_ICE (0))
+  ALLOCATE(DGS%XLEC    (0))
+  ALLOCATE(DGS%XLEC_ICE(0))
+  ALLOCATE(DGS%XGFLUXC (0))
+  ALLOCATE(DGS%XGFLUXC_ICE(0))
+  ALLOCATE(DGS%XEVAPC  (0))
+  ALLOCATE(DGS%XSUBLC  (0))  
+  ALLOCATE(DGS%XSWDC   (0))
+  ALLOCATE(DGS%XSWUC   (0))
+  ALLOCATE(DGS%XSWUC_ICE(0))
+  ALLOCATE(DGS%XLWDC   (0))
+  ALLOCATE(DGS%XLWUC   (0))
+  ALLOCATE(DGS%XLWUC_ICE(0))
+  ALLOCATE(DGS%XFMUC   (0))
+  ALLOCATE(DGS%XFMUC_ICE(0))
+  ALLOCATE(DGS%XFMVC   (0))
+  ALLOCATE(DGS%XFMVC_ICE(0))
+ENDIF
+!
+!* parameters at 2m
+!
+IF (DGS%N2M>=1) THEN
+  ALLOCATE(DGS%XRI      (KLU))
+  ALLOCATE(DGS%XRI_ICE  (KLU))
+  ALLOCATE(DGS%XT2M     (KLU))
+  ALLOCATE(DGS%XT2M_ICE (KLU))
+  ALLOCATE(DGS%XT2M_MIN (KLU))
+  ALLOCATE(DGS%XT2M_MAX (KLU))
+  ALLOCATE(DGS%XQ2M     (KLU))
+  ALLOCATE(DGS%XQ2M_ICE (KLU))
+  ALLOCATE(DGS%XHU2M    (KLU))
+  ALLOCATE(DGS%XHU2M_ICE(KLU))
+  ALLOCATE(DGS%XHU2M_MIN(KLU))
+  ALLOCATE(DGS%XHU2M_MAX(KLU))
+  ALLOCATE(DGS%XZON10M  (KLU))
+  ALLOCATE(DGS%XZON10M_ICE(KLU))
+  ALLOCATE(DGS%XMER10M  (KLU))
+  ALLOCATE(DGS%XMER10M_ICE(KLU))
+  ALLOCATE(DGS%XWIND10M (KLU))
+  ALLOCATE(DGS%XWIND10M_ICE(KLU))
+  ALLOCATE(DGS%XWIND10M_MAX(KLU))
+  !
+  DGS%XRI      = XUNDEF
+  DGS%XRI_ICE  = XUNDEF
+  DGS%XT2M     = XUNDEF
+  DGS%XT2M_ICE = XUNDEF
+  DGS%XT2M_MIN = XUNDEF
+  DGS%XT2M_MAX = 0.0
+  DGS%XQ2M     = XUNDEF
+  DGS%XQ2M_ICE = XUNDEF
+  DGS%XHU2M    = XUNDEF
+  DGS%XHU2M_ICE= XUNDEF
+  DGS%XHU2M_MIN= XUNDEF
+  DGS%XHU2M_MAX=-XUNDEF
+  DGS%XZON10M  = XUNDEF
+  DGS%XZON10M_ICE=XUNDEF
+  DGS%XMER10M  = XUNDEF
+  DGS%XMER10M_ICE=XUNDEF
+  DGS%XWIND10M = XUNDEF
+  DGS%XWIND10M_ICE=XUNDEF
+  DGS%XWIND10M_MAX = 0.0
+ELSE
+  ALLOCATE(DGS%XRI      (0))
+  ALLOCATE(DGS%XRI_ICE  (0))
+  ALLOCATE(DGS%XT2M     (0))
+  ALLOCATE(DGS%XT2M_ICE (0))
+  ALLOCATE(DGS%XT2M_MIN (0))
+  ALLOCATE(DGS%XT2M_MAX (0))
+  ALLOCATE(DGS%XQ2M     (0))
+  ALLOCATE(DGS%XQ2M_ICE (0))
+  ALLOCATE(DGS%XHU2M    (0))
+  ALLOCATE(DGS%XHU2M_ICE(0))
+  ALLOCATE(DGS%XHU2M_MIN(0))
+  ALLOCATE(DGS%XHU2M_MAX(0))
+  ALLOCATE(DGS%XZON10M  (0))
+  ALLOCATE(DGS%XZON10M_ICE(0))
+  ALLOCATE(DGS%XMER10M  (0))
+  ALLOCATE(DGS%XMER10M_ICE(0))
+  ALLOCATE(DGS%XWIND10M (0))
+  ALLOCATE(DGS%XWIND10M_ICE(0))
+  ALLOCATE(DGS%XWIND10M_MAX(0))
+END IF
+!
+!* transfer coefficients
+!
+IF (DGS%LCOEF) THEN
+  ALLOCATE(DGS%XCD     (KLU))
+  ALLOCATE(DGS%XCD_ICE (KLU))
+  ALLOCATE(DGS%XCH     (KLU))
+  ALLOCATE(DGS%XCH_ICE (KLU))
+  ALLOCATE(DGS%XCE     (KLU))
+  ALLOCATE(DGS%XZ0     (KLU))
+  ALLOCATE(DGS%XZ0_ICE (KLU))
+  ALLOCATE(DGS%XZ0H    (KLU))
+  ALLOCATE(DGS%XZ0H_ICE(KLU))
+  !
+  DGS%XCD      = XUNDEF
+  DGS%XCD_ICE  = XUNDEF
+  DGS%XCH      = XUNDEF
+  DGS%XCH_ICE  = XUNDEF
+  DGS%XCE      = XUNDEF
+  DGS%XZ0      = XUNDEF
+  DGS%XZ0_ICE  = XUNDEF
+  DGS%XZ0H     = XUNDEF
+  DGS%XZ0H_ICE = XUNDEF
+ELSE
+  ALLOCATE(DGS%XCD     (0))
+  ALLOCATE(DGS%XCD_ICE (0))
+  ALLOCATE(DGS%XCH     (0))
+  ALLOCATE(DGS%XCH_ICE (0))
+  ALLOCATE(DGS%XCE     (0))
+  ALLOCATE(DGS%XZ0     (0))
+  ALLOCATE(DGS%XZ0_ICE (0))
+  ALLOCATE(DGS%XZ0H    (0))
+  ALLOCATE(DGS%XZ0H_ICE(0))
+END IF
+!
+!
+!* surface humidity
+!
+IF (DGS%LSURF_VARS) THEN
+  ALLOCATE(DGS%XQS     (KLU))
+  ALLOCATE(DGS%XQS_ICE (KLU))
+  !
+  DGS%XQS      = XUNDEF
+  DGS%XQS_ICE  = XUNDEF
+ELSE
+  ALLOCATE(DGS%XQS     (0))
+  ALLOCATE(DGS%XQS_ICE (0))
+END IF
+!
+!* ocean diag
+!
+IF (DGO%LDIAG_OCEAN) THEN
+  ALLOCATE(DGO%XTOCMOY  (KLU))
+  ALLOCATE(DGO%XSOCMOY  (KLU))
+  ALLOCATE(DGO%XUOCMOY  (KLU))
+  ALLOCATE(DGO%XVOCMOY  (KLU))
+  ALLOCATE(DGO%XDOCMOY  (KLU))
+  !
+  DGO%XTOCMOY(:)=XUNDEF
+  DGO%XSOCMOY(:)=XUNDEF
+  DGO%XUOCMOY(:)=XUNDEF
+  DGO%XVOCMOY(:)=XUNDEF
+  DGO%XDOCMOY(:)=XUNDEF
+ELSE
+  ALLOCATE(DGO%XTOCMOY  (0))
+  ALLOCATE(DGO%XSOCMOY  (0))
+  ALLOCATE(DGO%XUOCMOY  (0))
+  ALLOCATE(DGO%XVOCMOY  (0))
+  ALLOCATE(DGO%XDOCMOY  (0))
+ENDIF
+!
+!* Seaice model diagnostics init 
+!
+IF (DGSI%LDIAG_SEAICE) THEN
+  ALLOCATE(DGSI%XSIT(KLU))
+  DGSI%XSIT=XUNDEF
+  ALLOCATE(DGSI%XSND(KLU))
+  DGSI%XSND=XUNDEF
+  ALLOCATE(DGSI%XMLT(KLU))
+  DGSI%XMLT=XUNDEF
+ELSE
+  ALLOCATE(DGSI%XSIT  (0))
+  ALLOCATE(DGSI%XSND  (0))
+  ALLOCATE(DGSI%XMLT  (0))
+ENDIF
+!
+!* Earth system model coupling variables
+!
+IF(LCPL_SEA.OR.S%LHANDLE_SIC)THEN
+!        
+  ALLOCATE(S%XCPL_SEA_WIND(KLU))
+  ALLOCATE(S%XCPL_SEA_FWSU(KLU))
+  ALLOCATE(S%XCPL_SEA_FWSV(KLU))
+  ALLOCATE(S%XCPL_SEA_SNET(KLU))
+  ALLOCATE(S%XCPL_SEA_HEAT(KLU))
+  ALLOCATE(S%XCPL_SEA_EVAP(KLU))
+  ALLOCATE(S%XCPL_SEA_RAIN(KLU))
+  ALLOCATE(S%XCPL_SEA_SNOW(KLU))
+  ALLOCATE(S%XCPL_SEA_EVPR(KLU))
+  ALLOCATE(S%XCPL_SEA_FWSM(KLU))
+  ALLOCATE(S%XCPL_SEA_PRES(KLU))
+  S%XCPL_SEA_WIND(:) = 0.0
+  S%XCPL_SEA_FWSU(:) = 0.0
+  S%XCPL_SEA_FWSV(:) = 0.0
+  S%XCPL_SEA_SNET(:) = 0.0
+  S%XCPL_SEA_HEAT(:) = 0.0
+  S%XCPL_SEA_EVAP(:) = 0.0
+  S%XCPL_SEA_RAIN(:) = 0.0
+  S%XCPL_SEA_SNOW(:) = 0.0
+  S%XCPL_SEA_EVPR(:) = 0.0
+  S%XCPL_SEA_FWSM(:) = 0.0
+  S%XCPL_SEA_PRES(:) = 0.0
+!
+ELSE
+  ALLOCATE(S%XCPL_SEA_WIND(0))
+  ALLOCATE(S%XCPL_SEA_FWSU(0))
+  ALLOCATE(S%XCPL_SEA_FWSV(0))
+  ALLOCATE(S%XCPL_SEA_SNET(0))
+  ALLOCATE(S%XCPL_SEA_HEAT(0))
+  ALLOCATE(S%XCPL_SEA_EVAP(0))
+  ALLOCATE(S%XCPL_SEA_RAIN(0))
+  ALLOCATE(S%XCPL_SEA_SNOW(0))
+  ALLOCATE(S%XCPL_SEA_EVPR(0))
+  ALLOCATE(S%XCPL_SEA_FWSM(0))
+  ALLOCATE(S%XCPL_SEA_PRES(0))
+ENDIF
+!
+IF(LCPL_SEAICE.OR.S%LHANDLE_SIC)THEN
+  ALLOCATE(S%XCPL_SEAICE_SNET(KLU))
+  ALLOCATE(S%XCPL_SEAICE_HEAT(KLU))
+  ALLOCATE(S%XCPL_SEAICE_EVAP(KLU))
+  S%XCPL_SEAICE_SNET(:) = 0.0
+  S%XCPL_SEAICE_HEAT(:) = 0.0
+  S%XCPL_SEAICE_EVAP(:) = 0.0
+ELSE
+  ALLOCATE(S%XCPL_SEAICE_SNET(0))
+  ALLOCATE(S%XCPL_SEAICE_HEAT(0))
+  ALLOCATE(S%XCPL_SEAICE_EVAP(0))        
+ENDIF
+!
+IF (LHOOK) CALL DR_HOOK('DIAG_SEAFLUX_INIT_N',1,ZHOOK_HANDLE)
+!
+!-------------------------------------------------------------------------------
+!
+END SUBROUTINE DIAG_SEAFLUX_INIT_n
diff --git a/src/ARCH_SRC/CPL_WAVE/SURFEX/get_sfx_sea.F90 b/src/ARCH_SRC/CPL_WAVE/SURFEX/get_sfx_sea.F90
new file mode 100755
index 0000000000000000000000000000000000000000..5c653346b9527c0c71410722908778377eaa4c48
--- /dev/null
+++ b/src/ARCH_SRC/CPL_WAVE/SURFEX/get_sfx_sea.F90
@@ -0,0 +1,255 @@
+!SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence
+!SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!SFX_LIC for details. version 1.
+!     #########
+      SUBROUTINE GET_SFX_SEA (S, U, W, &
+                              OCPL_SEAICE,OWATER,                      &
+                              PSEA_FWSU,PSEA_FWSV,PSEA_HEAT,PSEA_SNET, &
+                              PSEA_WIND,PSEA_FWSM,PSEA_EVAP,PSEA_RAIN, &
+                              PSEA_SNOW,PSEA_EVPR,PSEA_WATF,PSEA_PRES, &
+                              PSEAICE_HEAT,PSEAICE_SNET,PSEAICE_EVAP   )  
+!     ############################################################################
+!
+!!****  *GET_SFX_SEA* - routine to get some variables from surfex to
+!                        a oceanic general circulation model
+!!    PURPOSE
+!!    -------
+!!
+!!**  METHOD
+!!    ------
+!!
+!!    EXTERNAL
+!!    --------
+!!
+!!
+!!    IMPLICIT ARGUMENTS
+!!    ------------------
+!!
+!!    REFERENCE
+!!    ---------
+!!
+!!
+!!    AUTHOR
+!!    ------
+!!      B. Decharme      *Meteo France*
+!!
+!!    MODIFICATIONS
+!!    -------------
+!!      Original    10/2013
+!!      Modified    11/2014 : J. Pianezze - Add surface pressure coupling parameter
+!-------------------------------------------------------------------------------
+!
+!*       0.    DECLARATIONS
+!              ------------
+!
+!
+USE MODD_SEAFLUX_n, ONLY : SEAFLUX_t
+USE MODD_SURF_ATM_n, ONLY : SURF_ATM_t
+USE MODD_WATFLUX_n, ONLY : WATFLUX_t
+!
+USE MODD_SURF_PAR,   ONLY : XUNDEF
+!
+!
+!
+!
+USE MODI_UNPACK_SAME_RANK
+!
+USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
+USE PARKIND1  ,ONLY : JPRB
+!
+IMPLICIT NONE
+!
+!*       0.1   Declarations of arguments
+!              -------------------------
+!
+!
+TYPE(SEAFLUX_t), INTENT(INOUT) :: S
+TYPE(SURF_ATM_t), INTENT(INOUT) :: U
+TYPE(WATFLUX_t), INTENT(INOUT) :: W
+!
+LOGICAL,            INTENT(IN)  :: OCPL_SEAICE ! sea-ice / ocean key
+LOGICAL,            INTENT(IN)  :: OWATER      ! water included in sea smask
+!
+REAL, DIMENSION(:), INTENT(OUT) :: PSEA_FWSU  ! Cumulated zonal wind stress       (Pa.s)
+REAL, DIMENSION(:), INTENT(OUT) :: PSEA_FWSV  ! Cumulated meridian wind stress    (Pa.s)
+REAL, DIMENSION(:), INTENT(OUT) :: PSEA_HEAT  ! Cumulated Non solar net heat flux (J/m2)
+REAL, DIMENSION(:), INTENT(OUT) :: PSEA_SNET  ! Cumulated Solar net heat flux     (J/m2)
+REAL, DIMENSION(:), INTENT(OUT) :: PSEA_WIND  ! Cumulated 10m wind speed          (m)
+REAL, DIMENSION(:), INTENT(OUT) :: PSEA_FWSM  ! Cumulated wind stress             (Pa.s)
+REAL, DIMENSION(:), INTENT(OUT) :: PSEA_EVAP  ! Cumulated Evaporation             (kg/m2)
+REAL, DIMENSION(:), INTENT(OUT) :: PSEA_RAIN  ! Cumulated Rainfall rate           (kg/m2)
+REAL, DIMENSION(:), INTENT(OUT) :: PSEA_SNOW  ! Cumulated Snowfall rate           (kg/m2)
+REAL, DIMENSION(:), INTENT(OUT) :: PSEA_EVPR  ! Cumulated Evap-Precip             (kg/m2)
+REAL, DIMENSION(:), INTENT(OUT) :: PSEA_WATF  ! Cumulated Net water flux (kg/m2)
+REAL, DIMENSION(:), INTENT(OUT) :: PSEA_PRES  ! Cumulated Surface pressure        (Pa.s)
+!
+REAL, DIMENSION(:), INTENT(OUT) :: PSEAICE_HEAT ! Cumulated Sea-ice non solar net heat flux (J/m2)
+REAL, DIMENSION(:), INTENT(OUT) :: PSEAICE_SNET ! Cumulated Sea-ice solar net heat flux     (J/m2)
+REAL, DIMENSION(:), INTENT(OUT) :: PSEAICE_EVAP ! Cumulated Sea-ice sublimation             (kg/m2)
+!
+!*       0.2   Declarations of local variables
+!              -------------------------------
+!
+REAL, DIMENSION(SIZE(PSEA_HEAT))  :: ZWIND
+REAL, DIMENSION(SIZE(PSEA_HEAT))  :: ZFWSU
+REAL, DIMENSION(SIZE(PSEA_HEAT))  :: ZFWSV
+REAL, DIMENSION(SIZE(PSEA_HEAT))  :: ZSNET
+REAL, DIMENSION(SIZE(PSEA_HEAT))  :: ZHEAT
+REAL, DIMENSION(SIZE(PSEA_HEAT))  :: ZEVAP
+REAL, DIMENSION(SIZE(PSEA_HEAT))  :: ZRAIN
+REAL, DIMENSION(SIZE(PSEA_HEAT))  :: ZSNOW
+REAL, DIMENSION(SIZE(PSEA_HEAT))  :: ZEVPR
+REAL, DIMENSION(SIZE(PSEA_HEAT))  :: ZFWSM
+REAL, DIMENSION(SIZE(PSEA_HEAT))  :: ZPRES
+!
+REAL, DIMENSION(SIZE(PSEA_HEAT))  :: ZSNET_ICE
+REAL, DIMENSION(SIZE(PSEA_HEAT))  :: ZHEAT_ICE
+REAL, DIMENSION(SIZE(PSEA_HEAT))  :: ZEVAP_ICE
+!
+REAL(KIND=JPRB) :: ZHOOK_HANDLE
+!
+!-------------------------------------------------------------------------------
+IF (LHOOK) CALL DR_HOOK('GET_SFX_SEA',0,ZHOOK_HANDLE)
+!-------------------------------------------------------------------------------
+!
+!*       1.0   Initialization
+!              --------------
+!
+PSEA_FWSU (:) = XUNDEF
+PSEA_FWSV (:) = XUNDEF
+PSEA_HEAT (:) = XUNDEF
+PSEA_SNET (:) = XUNDEF
+PSEA_WIND (:) = XUNDEF
+PSEA_FWSM (:) = XUNDEF
+PSEA_EVAP (:) = XUNDEF
+PSEA_RAIN (:) = XUNDEF
+PSEA_SNOW (:) = XUNDEF
+PSEA_EVPR (:) = XUNDEF
+PSEA_WATF (:) = XUNDEF
+PSEA_PRES (:) = XUNDEF
+!
+PSEAICE_HEAT (:) = XUNDEF
+PSEAICE_SNET (:) = XUNDEF
+PSEAICE_EVAP (:) = XUNDEF
+!
+ZFWSU (:) = XUNDEF
+ZFWSV (:) = XUNDEF
+ZHEAT (:) = XUNDEF
+ZSNET (:) = XUNDEF
+ZWIND (:) = XUNDEF
+ZFWSM (:) = XUNDEF
+ZEVAP (:) = XUNDEF
+ZRAIN (:) = XUNDEF
+ZSNOW (:) = XUNDEF
+ZEVPR (:) = XUNDEF
+!
+ZHEAT_ICE (:) = XUNDEF
+ZSNET_ICE (:) = XUNDEF
+ZEVAP_ICE (:) = XUNDEF
+!
+!*       2.0   Get variable over sea
+!              ---------------------
+!
+IF(U%NSIZE_SEA>0)THEN
+!
+  CALL UNPACK_SAME_RANK(U%NR_SEA(:),S%XCPL_SEA_WIND(:),PSEA_WIND(:),XUNDEF)
+  CALL UNPACK_SAME_RANK(U%NR_SEA(:),S%XCPL_SEA_FWSU(:),PSEA_FWSU(:),XUNDEF)
+  CALL UNPACK_SAME_RANK(U%NR_SEA(:),S%XCPL_SEA_FWSV(:),PSEA_FWSV(:),XUNDEF)
+  CALL UNPACK_SAME_RANK(U%NR_SEA(:),S%XCPL_SEA_SNET(:),PSEA_SNET(:),XUNDEF)
+  CALL UNPACK_SAME_RANK(U%NR_SEA(:),S%XCPL_SEA_HEAT(:),PSEA_HEAT(:),XUNDEF)
+  CALL UNPACK_SAME_RANK(U%NR_SEA(:),S%XCPL_SEA_EVAP(:),PSEA_EVAP(:),XUNDEF)
+  CALL UNPACK_SAME_RANK(U%NR_SEA(:),S%XCPL_SEA_RAIN(:),PSEA_RAIN(:),XUNDEF)
+  CALL UNPACK_SAME_RANK(U%NR_SEA(:),S%XCPL_SEA_SNOW(:),PSEA_SNOW(:),XUNDEF)
+  CALL UNPACK_SAME_RANK(U%NR_SEA(:),S%XCPL_SEA_EVPR(:),PSEA_EVPR(:),XUNDEF)
+  CALL UNPACK_SAME_RANK(U%NR_SEA(:),S%XCPL_SEA_FWSM(:),PSEA_FWSM(:),XUNDEF)
+  CALL UNPACK_SAME_RANK(U%NR_SEA(:),S%XCPL_SEA_PRES(:),PSEA_PRES(:),XUNDEF)
+  S%XCPL_SEA_WIND(:) = 0.0
+  S%XCPL_SEA_EVAP(:) = 0.0
+  S%XCPL_SEA_HEAT(:) = 0.0
+  S%XCPL_SEA_SNET(:) = 0.0
+  S%XCPL_SEA_FWSU(:) = 0.0
+  S%XCPL_SEA_FWSV(:) = 0.0
+  S%XCPL_SEA_RAIN(:) = 0.0
+  S%XCPL_SEA_SNOW(:) = 0.0
+  S%XCPL_SEA_EVPR(:) = 0.0
+  S%XCPL_SEA_FWSM(:) = 0.0
+  S%XCPL_SEA_PRES(:) = 0.0
+!
+  IF (OCPL_SEAICE) THEN
+    CALL UNPACK_SAME_RANK(U%NR_SEA(:),S%XCPL_SEAICE_SNET(:),PSEAICE_SNET(:),XUNDEF)
+    CALL UNPACK_SAME_RANK(U%NR_SEA(:),S%XCPL_SEAICE_HEAT(:),PSEAICE_HEAT(:),XUNDEF)
+    CALL UNPACK_SAME_RANK(U%NR_SEA(:),S%XCPL_SEAICE_EVAP(:),PSEAICE_EVAP(:),XUNDEF)
+    S%XCPL_SEAICE_SNET(:) = 0.0
+    S%XCPL_SEAICE_EVAP(:) = 0.0
+    S%XCPL_SEAICE_HEAT(:) = 0.0  
+  ENDIF
+!
+ENDIF
+!
+!*       3.0   Get variable over water without Flake
+!              -------------------------------------
+!
+IF (OWATER.AND.U%NSIZE_WATER>0) THEN
+!
+  CALL UNPACK_SAME_RANK(U%NR_WATER(:),W%XCPL_WATER_WIND(:),ZWIND(:),XUNDEF)
+  CALL UNPACK_SAME_RANK(U%NR_WATER(:),W%XCPL_WATER_FWSU(:),ZFWSU(:),XUNDEF)
+  CALL UNPACK_SAME_RANK(U%NR_WATER(:),W%XCPL_WATER_FWSV(:),ZFWSV(:),XUNDEF)
+  CALL UNPACK_SAME_RANK(U%NR_WATER(:),W%XCPL_WATER_SNET(:),ZSNET(:),XUNDEF)
+  CALL UNPACK_SAME_RANK(U%NR_WATER(:),W%XCPL_WATER_HEAT(:),ZHEAT(:),XUNDEF)
+  CALL UNPACK_SAME_RANK(U%NR_WATER(:),W%XCPL_WATER_EVAP(:),ZEVAP(:),XUNDEF)
+  CALL UNPACK_SAME_RANK(U%NR_WATER(:),W%XCPL_WATER_RAIN(:),ZRAIN(:),XUNDEF)
+  CALL UNPACK_SAME_RANK(U%NR_WATER(:),W%XCPL_WATER_SNOW(:),ZSNOW(:),XUNDEF)
+  CALL UNPACK_SAME_RANK(U%NR_WATER(:),W%XCPL_WATER_FWSM(:),ZFWSM(:),XUNDEF)
+!
+  WHERE(U%XWATER(:)>0.0) 
+    PSEA_WIND(:) = (U%XSEA(:)*PSEA_WIND(:)+U%XWATER(:)*ZWIND(:))/(U%XSEA(:)+U%XWATER(:))
+    PSEA_FWSU(:) = (U%XSEA(:)*PSEA_FWSU(:)+U%XWATER(:)*ZFWSU(:))/(U%XSEA(:)+U%XWATER(:))
+    PSEA_FWSV(:) = (U%XSEA(:)*PSEA_FWSV(:)+U%XWATER(:)*ZFWSV(:))/(U%XSEA(:)+U%XWATER(:))
+    PSEA_SNET(:) = (U%XSEA(:)*PSEA_SNET(:)+U%XWATER(:)*ZSNET(:))/(U%XSEA(:)+U%XWATER(:))
+    PSEA_HEAT(:) = (U%XSEA(:)*PSEA_HEAT(:)+U%XWATER(:)*ZHEAT(:))/(U%XSEA(:)+U%XWATER(:))
+    PSEA_EVAP(:) = (U%XSEA(:)*PSEA_EVAP(:)+U%XWATER(:)*ZEVAP(:))/(U%XSEA(:)+U%XWATER(:))
+    PSEA_RAIN(:) = (U%XSEA(:)*PSEA_RAIN(:)+U%XWATER(:)*ZRAIN(:))/(U%XSEA(:)+U%XWATER(:))
+    PSEA_SNOW(:) = (U%XSEA(:)*PSEA_SNOW(:)+U%XWATER(:)*ZSNOW(:))/(U%XSEA(:)+U%XWATER(:))
+    PSEA_FWSM(:) = (U%XSEA(:)*PSEA_FWSM(:)+U%XWATER(:)*ZFWSM(:))/(U%XSEA(:)+U%XWATER(:))
+  ENDWHERE 
+!
+  W%XCPL_WATER_WIND(:) = 0.0
+  W%XCPL_WATER_EVAP(:) = 0.0
+  W%XCPL_WATER_HEAT(:) = 0.0
+  W%XCPL_WATER_SNET(:) = 0.0
+  W%XCPL_WATER_FWSU(:) = 0.0
+  W%XCPL_WATER_FWSV(:) = 0.0
+  W%XCPL_WATER_RAIN(:) = 0.0
+  W%XCPL_WATER_SNOW(:) = 0.0
+  W%XCPL_WATER_FWSM(:) = 0.0
+!
+  IF (OCPL_SEAICE) THEN
+    CALL UNPACK_SAME_RANK(U%NR_WATER(:),W%XCPL_WATERICE_SNET(:),ZSNET_ICE(:),XUNDEF)
+    CALL UNPACK_SAME_RANK(U%NR_WATER(:),W%XCPL_WATERICE_HEAT(:),ZHEAT_ICE(:),XUNDEF)
+    CALL UNPACK_SAME_RANK(U%NR_WATER(:),W%XCPL_WATERICE_EVAP(:),ZEVAP_ICE(:),XUNDEF)
+    WHERE(U%XWATER(:)>0.0)     
+      PSEAICE_SNET(:) = (U%XSEA(:)*PSEAICE_SNET(:)+U%XWATER(:)*ZSNET_ICE(:))/(U%XSEA(:)+U%XWATER(:))
+      PSEAICE_HEAT(:) = (U%XSEA(:)*PSEAICE_HEAT(:)+U%XWATER(:)*ZHEAT_ICE(:))/(U%XSEA(:)+U%XWATER(:))
+      PSEAICE_EVAP(:) = (U%XSEA(:)*PSEAICE_EVAP(:)+U%XWATER(:)*ZEVAP_ICE(:))/(U%XSEA(:)+U%XWATER(:))
+    ENDWHERE  
+    W%XCPL_WATERICE_SNET(:) = 0.0
+    W%XCPL_WATERICE_EVAP(:) = 0.0
+    W%XCPL_WATERICE_HEAT(:) = 0.0
+  ENDIF  
+! 
+ENDIF
+!
+!*       4.0   Net water flux
+!              -----------------------
+!
+IF(U%NSIZE_SEA>0)THEN
+!
+  PSEA_WATF(:) = PSEA_RAIN(:) + PSEA_SNOW(:) - PSEA_EVAP(:)
+!
+ENDIF
+!-------------------------------------------------------------------------------
+IF (LHOOK) CALL DR_HOOK('GET_SFX_SEA',1,ZHOOK_HANDLE)
+!-------------------------------------------------------------------------------
+!
+END SUBROUTINE GET_SFX_SEA
diff --git a/src/ARCH_SRC/CPL_WAVE/SURFEX/get_sfx_wave.F90 b/src/ARCH_SRC/CPL_WAVE/SURFEX/get_sfx_wave.F90
new file mode 100755
index 0000000000000000000000000000000000000000..17a47d0069608495b6ea753955c0780598420638
--- /dev/null
+++ b/src/ARCH_SRC/CPL_WAVE/SURFEX/get_sfx_wave.F90
@@ -0,0 +1,92 @@
+!SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence
+!SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!SFX_LIC for details. version 1.
+!     #########
+      SUBROUTINE GET_SFX_WAVE(U, DGS, &
+                              PWAVE_U10,PWAVE_V10)  
+!     ############################################################################
+!
+!!****  *GET_SFX_WAVE* - routine to get some variables from surfex to
+!                        a wave model
+!!    PURPOSE
+!!    -------
+!!
+!!**  METHOD
+!!    ------
+!!
+!!    EXTERNAL
+!!    --------
+!!
+!!
+!!    IMPLICIT ARGUMENTS
+!!    ------------------
+!!
+!!    REFERENCE
+!!    ---------
+!!
+!!
+!!    AUTHOR
+!!    ------
+!!	J. Pianezze      *LPO*	
+!!
+!!    MODIFICATIONS
+!!    -------------
+!!      Original    09/2014
+!-------------------------------------------------------------------------------
+!
+!*       0.    DECLARATIONS
+!              ------------
+!
+USE MODD_SURF_ATM_n, ONLY : SURF_ATM_t
+USE MODD_DIAG_SEAFLUX_n, ONLY : DIAG_SEAFLUX_t
+!
+USE MODD_SURF_PAR,   ONLY : XUNDEF
+!
+USE MODI_UNPACK_SAME_RANK
+!
+USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
+USE PARKIND1  ,ONLY : JPRB
+!
+IMPLICIT NONE
+!
+!
+!*       0.1   Declarations of arguments
+!              -------------------------
+!
+TYPE(SURF_ATM_t), INTENT(INOUT) :: U
+TYPE(DIAG_SEAFLUX_t), INTENT(INOUT) :: DGS
+!
+REAL, DIMENSION(:), INTENT(OUT) :: PWAVE_U10  ! 10 meter u-wind (m/s)
+REAL, DIMENSION(:), INTENT(OUT) :: PWAVE_V10  ! 10 meter v-wind (m/s)
+!
+!*       0.2   Declarations of local variables
+!              -------------------------------
+!
+REAL(KIND=JPRB) :: ZHOOK_HANDLE
+!
+!-------------------------------------------------------------------------------
+IF (LHOOK) CALL DR_HOOK('GET_SFX_WAVE',0,ZHOOK_HANDLE)
+!-------------------------------------------------------------------------------
+!
+!*       1.0   Initialization
+!              --------------
+!
+PWAVE_U10(:) = XUNDEF
+PWAVE_V10(:) = XUNDEF
+!
+!*       2.0   Get variable over wave
+!              ----------------------
+!
+IF(U%NSIZE_SEA>0)THEN
+!
+  CALL UNPACK_SAME_RANK(U%NR_SEA(:),DGS%XZON10M(:),PWAVE_U10(:),XUNDEF)
+  CALL UNPACK_SAME_RANK(U%NR_SEA(:),DGS%XMER10M(:),PWAVE_V10(:),XUNDEF)
+!
+ENDIF
+!
+!-------------------------------------------------------------------------------
+IF (LHOOK) CALL DR_HOOK('GET_SFX_WAVE',1,ZHOOK_HANDLE)
+!-------------------------------------------------------------------------------
+!
+END SUBROUTINE GET_SFX_WAVE
diff --git a/src/ARCH_SRC/CPL_WAVE/SURFEX/get_sfxcpln.F90 b/src/ARCH_SRC/CPL_WAVE/SURFEX/get_sfxcpln.F90
new file mode 100644
index 0000000000000000000000000000000000000000..e0df0a92ed94d2f62d2a59dd5aa4d3c90db97ff9
--- /dev/null
+++ b/src/ARCH_SRC/CPL_WAVE/SURFEX/get_sfxcpln.F90
@@ -0,0 +1,228 @@
+!SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence
+!SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!SFX_LIC for details. version 1.
+!     #########
+      SUBROUTINE GET_SFXCPL_n (I, S, U, W, &
+                               HPROGRAM,KI,PRUI,PWIND,PFWSU,PFWSV,PSNET, &
+                               PHEAT,PEVAP,PRAIN,PSNOW,PEVPR,PICEFLUX,   &
+                               PFWSM,PPS,PHEAT_ICE,PEVAP_ICE,PSNET_ICE)  
+!     ###################################################################
+!
+!!****  *GETSFXCPL_n* - routine to get some variables from surfex into
+!                       ocean and/or a river routing model when the coupler
+!                       is not in SURFEX but in ARPEGE.
+!
+!                       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+!                       This routine will be suppress soon.
+!                       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+!
+!!    PURPOSE
+!!    -------
+!!
+!!**  METHOD
+!!    ------
+!!
+!!    EXTERNAL
+!!    --------
+!!
+!!
+!!    IMPLICIT ARGUMENTS
+!!    ------------------
+!!
+!!    REFERENCE
+!!    ---------
+!!
+!!
+!!    AUTHOR
+!!    ------
+!!      B. Decharme      *Meteo France*
+!!
+!!    MODIFICATIONS
+!!    -------------
+!!      Original    08/2009
+!!      Modified    11/2014 : J. Pianezze - Add surface pressure coupling parameter
+!----------------------------------------------------------------------------------
+!
+!*       0.    DECLARATIONS
+!              ------------
+!
+!
+!
+!
+USE MODD_ISBA_n, ONLY : ISBA_t
+USE MODD_SEAFLUX_n, ONLY : SEAFLUX_t
+USE MODD_SURF_ATM_n, ONLY : SURF_ATM_t
+USE MODD_WATFLUX_n, ONLY : WATFLUX_t
+!
+USE MODD_SURF_PAR,   ONLY : XUNDEF
+!
+USE MODN_SFX_OASIS,  ONLY : LWATER
+USE MODD_SFX_OASIS,  ONLY : LCPL_LAND, LCPL_CALVING, LCPL_GW, &
+                            LCPL_FLOOD, LCPL_SEA, LCPL_SEAICE
+!
+USE MODI_GET_SFX_SEA
+USE MODI_GET_SFX_LAND
+USE MODI_ABOR1_SFX
+USE MODI_GET_LUOUT
+!
+USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
+USE PARKIND1  ,ONLY : JPRB
+!
+USE MODI_GET_1D_MASK
+!
+USE MODI_GET_FRAC_n
+IMPLICIT NONE
+!
+!*       0.1   Declarations of arguments
+!              -------------------------
+!
+!
+TYPE(ISBA_t), INTENT(INOUT) :: I
+TYPE(SEAFLUX_t), INTENT(INOUT) :: S
+TYPE(SURF_ATM_t), INTENT(INOUT) :: U
+TYPE(WATFLUX_t), INTENT(INOUT) :: W
+!
+ CHARACTER(LEN=6),    INTENT(IN)  :: HPROGRAM
+INTEGER,             INTENT(IN)  :: KI      ! number of points
+!
+REAL, DIMENSION(KI), INTENT(OUT) :: PRUI
+REAL, DIMENSION(KI), INTENT(OUT) :: PWIND
+REAL, DIMENSION(KI), INTENT(OUT) :: PFWSU
+REAL, DIMENSION(KI), INTENT(OUT) :: PFWSV
+REAL, DIMENSION(KI), INTENT(OUT) :: PSNET
+REAL, DIMENSION(KI), INTENT(OUT) :: PHEAT
+REAL, DIMENSION(KI), INTENT(OUT) :: PEVAP
+REAL, DIMENSION(KI), INTENT(OUT) :: PRAIN
+REAL, DIMENSION(KI), INTENT(OUT) :: PSNOW
+REAL, DIMENSION(KI), INTENT(OUT) :: PEVPR
+REAL, DIMENSION(KI), INTENT(OUT) :: PICEFLUX
+REAL, DIMENSION(KI), INTENT(OUT) :: PFWSM
+REAL, DIMENSION(KI), INTENT(OUT) :: PPS
+REAL, DIMENSION(KI), INTENT(OUT) :: PHEAT_ICE
+REAL, DIMENSION(KI), INTENT(OUT) :: PEVAP_ICE
+REAL, DIMENSION(KI), INTENT(OUT) :: PSNET_ICE
+!
+!*       0.2   Declarations of local variables
+!              -------------------------------
+!
+REAL, DIMENSION(KI)   :: ZRUNOFF    ! Cumulated Surface runoff             (kg/m2)
+REAL, DIMENSION(KI)   :: ZDRAIN     ! Cumulated Deep drainage              (kg/m2)
+REAL, DIMENSION(KI)   :: ZCALVING   ! Cumulated Calving flux               (kg/m2)
+REAL, DIMENSION(KI)   :: ZRECHARGE  ! Cumulated Recharge to groundwater    (kg/m2)
+REAL, DIMENSION(KI)   :: ZSRCFLOOD  ! Cumulated flood freshwater flux      (kg/m2)
+!
+REAL, DIMENSION(KI)   :: ZSEA_FWSU  ! Cumulated zonal wind stress       (Pa.s)
+REAL, DIMENSION(KI)   :: ZSEA_FWSV  ! Cumulated meridian wind stress    (Pa.s)
+REAL, DIMENSION(KI)   :: ZSEA_HEAT  ! Cumulated Non solar net heat flux (J/m2)
+REAL, DIMENSION(KI)   :: ZSEA_SNET  ! Cumulated Solar net heat flux     (J/m2)
+REAL, DIMENSION(KI)   :: ZSEA_WIND  ! Cumulated 10m wind speed          (m)
+REAL, DIMENSION(KI)   :: ZSEA_FWSM  ! Cumulated wind stress             (Pa.s)
+REAL, DIMENSION(KI)   :: ZSEA_EVAP  ! Cumulated Evaporation             (kg/m2)
+REAL, DIMENSION(KI)   :: ZSEA_RAIN  ! Cumulated Rainfall rate           (kg/m2)
+REAL, DIMENSION(KI)   :: ZSEA_SNOW  ! Cumulated Snowfall rate           (kg/m2)
+REAL, DIMENSION(KI)   :: ZSEA_EVPR  ! Cumulated Evap-Precp. rate        (kg/m2)
+REAL, DIMENSION(KI)   :: ZSEA_WATF  ! Cumulated freshwater flux         (kg/m2)
+REAL, DIMENSION(KI)   :: ZSEA_PRES  ! Cumulated Surface pressure        (Pa.s)
+!
+REAL, DIMENSION(KI)   :: ZSEAICE_HEAT ! Cumulated Sea-ice non solar net heat flux (J/m2)
+REAL, DIMENSION(KI)   :: ZSEAICE_SNET ! Cumulated Sea-ice solar net heat flux     (J/m2)
+REAL, DIMENSION(KI)   :: ZSEAICE_EVAP ! Cumulated Sea-ice sublimation             (kg/m2)
+!
+INTEGER :: ILU, ILUOUT
+!
+REAL(KIND=JPRB) :: ZHOOK_HANDLE
+!
+!-------------------------------------------------------------------------------
+IF (LHOOK) CALL DR_HOOK('GET_SFXCPL_N',0,ZHOOK_HANDLE)
+!
+CALL GET_LUOUT(HPROGRAM,ILUOUT)
+!
+!-------------------------------------------------------------------------------
+! Global argument
+!
+IF(KI/=U%NSIZE_FULL)THEN
+  WRITE(ILUOUT,*) 'size of field expected by the coupling :', KI
+  WRITE(ILUOUT,*) 'size of field in SURFEX                :', U%NSIZE_FULL
+  CALL ABOR1_SFX('GET_SFXCPL_N: VECTOR SIZE NOT CORRECT FOR COUPLING')
+ENDIF
+!
+!-------------------------------------------------------------------------------
+! Get variable over nature tile
+!
+IF(LCPL_LAND)THEN
+!
+! * Init land output fields
+!
+  ZRUNOFF  (:) = XUNDEF
+  ZDRAIN   (:) = XUNDEF
+  ZCALVING (:) = XUNDEF
+  ZRECHARGE(:) = XUNDEF
+  ZSRCFLOOD(:) = XUNDEF
+!
+! * Get land output fields
+!       
+  CALL GET_SFX_LAND(I, U, &
+                    LCPL_GW,LCPL_FLOOD,LCPL_CALVING,    &
+                    ZRUNOFF,ZDRAIN,ZCALVING,ZRECHARGE,  &
+                    ZSRCFLOOD             )
+!
+! * Assign land output fields
+!        
+  PRUI    (:) = ZRUNOFF (:)+ZDRAIN(:)
+  PICEFLUX(:) = ZCALVING(:)
+!
+ENDIF
+!
+!-------------------------------------------------------------------------------
+! Get variable over sea and water tiles and for ice
+!
+IF(LCPL_SEA)THEN
+!
+! * Init sea output fields
+!
+  ZSEA_FWSU (:) = XUNDEF
+  ZSEA_FWSV (:) = XUNDEF
+  ZSEA_HEAT (:) = XUNDEF
+  ZSEA_SNET (:) = XUNDEF
+  ZSEA_WIND (:) = XUNDEF
+  ZSEA_FWSM (:) = XUNDEF
+  ZSEA_EVAP (:) = XUNDEF
+  ZSEA_RAIN (:) = XUNDEF
+  ZSEA_SNOW (:) = XUNDEF
+  ZSEA_WATF (:) = XUNDEF
+  ZSEA_PRES (:) = XUNDEF
+!
+  ZSEAICE_HEAT (:) = XUNDEF
+  ZSEAICE_SNET (:) = XUNDEF
+  ZSEAICE_EVAP (:) = XUNDEF
+!
+! * Get sea output fields
+!
+  CALL GET_SFX_SEA(S, U, W, &
+                   LCPL_SEAICE,LWATER,                      &
+                   ZSEA_FWSU,ZSEA_FWSV,ZSEA_HEAT,ZSEA_SNET, &
+                   ZSEA_WIND,ZSEA_FWSM,ZSEA_EVAP,ZSEA_RAIN, &
+                   ZSEA_SNOW,ZSEA_EVPR,ZSEA_WATF,ZSEA_PRES,           &
+                   ZSEAICE_HEAT,ZSEAICE_SNET,ZSEAICE_EVAP   )
+!
+! * Assign sea output fields
+!
+  PFWSU     (:) = ZSEA_FWSU (:)
+  PFWSV     (:) = ZSEA_FWSV (:)
+  PSNET     (:) = ZSEA_SNET (:)
+  PHEAT     (:) = ZSEA_HEAT (:)
+  PEVAP     (:) = ZSEA_EVAP (:)
+  PRAIN     (:) = ZSEA_RAIN (:)
+  PSNOW     (:) = ZSEA_SNOW (:)
+  PFWSM     (:) = ZSEA_FWSM (:)
+  PHEAT_ICE (:) = ZSEAICE_HEAT (:)
+  PEVAP_ICE (:) = ZSEAICE_EVAP (:)
+  PSNET_ICE (:) = ZSEAICE_SNET (:)
+!
+ENDIF
+!
+!-------------------------------------------------------------------------------
+IF (LHOOK) CALL DR_HOOK('GET_SFXCPL_N',1,ZHOOK_HANDLE)
+!
+END SUBROUTINE GET_SFXCPL_n
diff --git a/src/ARCH_SRC/CPL_WAVE/SURFEX/init_seafluxn.F90 b/src/ARCH_SRC/CPL_WAVE/SURFEX/init_seafluxn.F90
new file mode 100644
index 0000000000000000000000000000000000000000..a00b0930af3d5e22c26570598ff2211bbf71a45f
--- /dev/null
+++ b/src/ARCH_SRC/CPL_WAVE/SURFEX/init_seafluxn.F90
@@ -0,0 +1,460 @@
+!SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence
+!SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!SFX_LIC for details. version 1.
+!     #############################################################
+      SUBROUTINE INIT_SEAFLUX_n (DTCO, DGU, UG, U, SM,GCP, &
+                                 HPROGRAM,HINIT,                            &
+                                  KI,KSV,KSW,                                &
+                                  HSV,PCO2,PRHOA,                            &
+                                  PZENITH,PAZIM,PSW_BANDS,PDIR_ALB,PSCA_ALB, &
+                                  PEMIS,PTSRAD,PTSURF,                       &
+                                  KYEAR, KMONTH,KDAY, PTIME,                 &
+                                  HATMFILE,HATMFILETYPE,                     &
+                                  HTEST                                      )  
+!     #############################################################
+!
+!!****  *INIT_SEAFLUX_n* - routine to initialize SEAFLUX
+!!
+!!    PURPOSE
+!!    -------
+!!
+!!**  METHOD
+!!    ------
+!!
+!!    EXTERNAL
+!!    --------
+!!
+!!
+!!    IMPLICIT ARGUMENTS
+!!    ------------------
+!!
+!!    REFERENCE
+!!    ---------
+!!
+!!
+!!    AUTHOR
+!!    ------
+!!      V. Masson   *Meteo France*
+!!
+!!    MODIFICATIONS
+!!    -------------
+!!      Original    01/2003
+!!      Modified    01/2006 : sea flux parameterization.
+!!                  01/2008 : coupling with 1D ocean
+!!      B. Decharme 08/2009 : specific treatment for sea/ice in the Earth System Model 
+!!      B. Decharme 07/2011 : read pgd+prep 
+!!      B. Decharme 04/2013 : new coupling variables
+!!      S. Senesi   01/2014 : introduce sea-ice model 
+!!      S. Belamari 03/2014 : add NZ0 (to choose PZ0SEA formulation)
+!!      R. Séférian 01/2015 : introduce interactive ocean surface albedo
+!!      M.N. Bouin  03/2014 : possibility of wave parameters
+!!                          ! from external source
+!!      J. Pianezze 11/2014 : add wave coupling flag for wave parameters
+!-------------------------------------------------------------------------------
+!
+!*       0.    DECLARATIONS
+!              ------------
+!
+!
+USE MODD_SURFEX_n, ONLY : SEAFLUX_MODEL_t
+!
+USE MODD_DATA_COVER_n, ONLY : DATA_COVER_t
+USE MODD_DIAG_SURF_ATM_n, ONLY : DIAG_SURF_ATM_t
+USE MODD_SURF_ATM_GRID_n, ONLY : SURF_ATM_GRID_t
+USE MODD_SURF_ATM_n, ONLY : SURF_ATM_t
+USE MODD_GRID_CONF_PROJ, ONLY : GRID_CONF_PROJ_t
+!
+USE MODD_SFX_OASIS,      ONLY : LCPL_WAVE,LCPL_SEA,LCPL_SEAICE
+!
+USE MODD_READ_NAMELIST,  ONLY : LNAM_READ
+USE MODD_CSTS,           ONLY : XTTS
+USE MODD_SNOW_PAR,       ONLY : XZ0HSN
+USE MODD_SURF_PAR,       ONLY : XUNDEF, NUNDEF
+USE MODD_CHS_AEROSOL,    ONLY: LVARSIGI, LVARSIGJ
+USE MODD_DST_SURF,       ONLY: LVARSIG_DST, NDSTMDE, NDST_MDEBEG, LRGFIX_DST
+USE MODD_SLT_SURF,       ONLY: LVARSIG_SLT, NSLTMDE, NSLT_MDEBEG, LRGFIX_SLT
+!
+USE MODI_INIT_IO_SURF_n
+USE MODI_DEFAULT_CH_DEP
+!
+USE MODI_DEFAULT_SEAFLUX
+USE MODI_DEFAULT_DIAG_SEAFLUX
+USE MODI_READ_DEFAULT_SEAFLUX_n
+USE MODI_READ_SEAFLUX_CONF_n
+USE MODI_READ_SEAFLUX_n
+!
+USE MODI_READ_OCEAN_n
+!
+USE MODI_DEFAULT_SEAICE
+USE MODI_READ_SEAICE_n
+!
+USE MODI_READ_PGD_SEAFLUX_n
+USE MODI_DIAG_SEAFLUX_INIT_n
+USE MODI_END_IO_SURF_n
+USE MODI_GET_LUOUT
+USE MODI_READ_SURF
+USE MODI_READ_SEAFLUX_DATE
+USE MODI_READ_NAM_PREP_SEAFLUX_n
+USE MODI_INIT_CHEMICAL_n
+USE MODI_PREP_CTRL_SEAFLUX
+USE MODI_UPDATE_RAD_SEA
+USE MODI_READ_SEAFLUX_SBL_n
+USE MODI_ABOR1_SFX
+!
+USE MODI_SET_SURFEX_FILEIN
+!
+USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
+USE PARKIND1  ,ONLY : JPRB
+!
+!
+IMPLICIT NONE
+!
+!*       0.1   Declarations of arguments
+!              -------------------------
+!
+!
+TYPE(DATA_COVER_t), INTENT(INOUT) :: DTCO
+TYPE(DIAG_SURF_ATM_t), INTENT(INOUT) :: DGU
+TYPE(SURF_ATM_GRID_t), INTENT(INOUT) :: UG
+TYPE(SURF_ATM_t), INTENT(INOUT) :: U
+TYPE(GRID_CONF_PROJ_t),INTENT(INOUT) :: GCP
+TYPE(SEAFLUX_MODEL_t), INTENT(INOUT) :: SM
+!
+ CHARACTER(LEN=6),                 INTENT(IN)  :: HPROGRAM  ! program calling surf. schemes
+ CHARACTER(LEN=3),                 INTENT(IN)  :: HINIT     ! choice of fields to initialize
+INTEGER,                          INTENT(IN)  :: KI        ! number of points
+INTEGER,                          INTENT(IN)  :: KSV       ! number of scalars
+INTEGER,                          INTENT(IN)  :: KSW       ! number of short-wave spectral bands
+ CHARACTER(LEN=6), DIMENSION(KSV), INTENT(IN)  :: HSV       ! name of all scalar variables
+REAL,             DIMENSION(KI),  INTENT(IN)  :: PCO2      ! CO2 concentration (kg/m3)
+REAL,             DIMENSION(KI),  INTENT(IN)  :: PRHOA     ! air density
+REAL,             DIMENSION(KI),  INTENT(IN)  :: PZENITH   ! solar zenithal angle
+REAL,             DIMENSION(KI),  INTENT(IN)  :: PAZIM     ! solar azimuthal angle (rad from N, clock)
+REAL,             DIMENSION(KSW), INTENT(IN)  :: PSW_BANDS ! middle wavelength of each band
+REAL,             DIMENSION(KI,KSW),INTENT(OUT) :: PDIR_ALB  ! direct albedo for each band
+REAL,             DIMENSION(KI,KSW),INTENT(OUT) :: PSCA_ALB  ! diffuse albedo for each band
+REAL,             DIMENSION(KI),  INTENT(OUT) :: PEMIS     ! emissivity
+REAL,             DIMENSION(KI),  INTENT(OUT) :: PTSRAD    ! radiative temperature
+REAL,             DIMENSION(KI),  INTENT(OUT) :: PTSURF    ! surface effective temperature         (K)
+INTEGER,                          INTENT(IN)  :: KYEAR     ! current year (UTC)
+INTEGER,                          INTENT(IN)  :: KMONTH    ! current month (UTC)
+INTEGER,                          INTENT(IN)  :: KDAY      ! current day (UTC)
+REAL,                             INTENT(IN)  :: PTIME     ! current time since
+                                                           !  midnight (UTC, s)
+!
+ CHARACTER(LEN=28),                INTENT(IN)  :: HATMFILE    ! atmospheric file name
+ CHARACTER(LEN=6),                 INTENT(IN)  :: HATMFILETYPE! atmospheric file type
+ CHARACTER(LEN=2),                 INTENT(IN)  :: HTEST       ! must be equal to 'OK'
+!
+!
+!*       0.2   Declarations of local variables
+!              -------------------------------
+!
+INTEGER           :: ILU    ! sizes of SEAFLUX arrays
+INTEGER           :: ILUOUT ! unit of output listing file
+INTEGER           :: IRESP  ! return code
+REAL(KIND=JPRB) :: ZHOOK_HANDLE
+!
+!-------------------------------------------------------------------------------
+!
+!         Initialisation for IO
+!
+IF (LHOOK) CALL DR_HOOK('INIT_SEAFLUX_N',0,ZHOOK_HANDLE)
+ CALL GET_LUOUT(HPROGRAM,ILUOUT)
+!
+IF (HTEST/='OK') THEN
+  CALL ABOR1_SFX('INIT_SEAFLUXN: FATAL ERROR DURING ARGUMENT TRANSFER')
+END IF
+!
+!
+!         Others litlle things
+!
+PDIR_ALB = XUNDEF
+PSCA_ALB = XUNDEF
+PEMIS    = XUNDEF
+PTSRAD   = XUNDEF
+PTSURF   = XUNDEF
+!
+SM%O%LMERCATOR = .FALSE.
+SM%O%LCURRENT  = .FALSE.
+!
+IF (LNAM_READ) THEN
+ !
+ !*       0.     Defaults
+ !               --------
+ !
+ !        0.1. Hard defaults
+ !      
+ 
+ CALL DEFAULT_SEAFLUX(SM%S%XTSTEP,SM%S%XOUT_TSTEP,SM%S%CSEA_ALB,SM%S%CSEA_FLUX,SM%S%LPWG, &
+                      SM%S%LPRECIP,SM%S%LPWEBB,SM%S%NZ0,SM%S%NGRVWAVES,SM%O%LPROGSST,   &
+                      SM%O%NTIME_COUPLING,SM%O%XOCEAN_TSTEP,SM%S%XICHCE,SM%S%CINTERPOL_SST,&
+                      SM%S%CINTERPOL_SSS,SM%S%LWAVEWIND                            )
+ CALL DEFAULT_SEAICE(HPROGRAM,                                   &
+                     SM%S%CINTERPOL_SIC,SM%S%CINTERPOL_SIT, SM%S%XFREEZING_SST, &
+                     SM%S%XSEAICE_TSTEP, SM%S%XSIC_EFOLDING_TIME,          &
+                     SM%S%XSIT_EFOLDING_TIME, SM%S%XCD_ICE_CST, SM%S%XSI_FLX_DRV)     
+ !                     
+ CALL DEFAULT_CH_DEP(SM%CHS%CCH_DRY_DEP) 
+ !            
+ CALL DEFAULT_DIAG_SEAFLUX(SM%DGS%N2M,SM%DGS%LSURF_BUDGET,SM%DGS%L2M_MIN_ZS,&
+                        SM%DGS%LRAD_BUDGET,SM%DGS%LCOEF,SM%DGS%LSURF_VARS,&
+                           SM%DGO%LDIAG_OCEAN,SM%DGSI%LDIAG_SEAICE,SM%DGS%LSURF_BUDGETC,&
+                          SM%DGS%LRESET_BUDGETC,SM%DGS%XDIAG_TSTEP )  
+
+ENDIF
+!
+!
+!        0.2. Defaults from file header
+!    
+ CALL READ_DEFAULT_SEAFLUX_n(SM%CHS, SM%DGO, SM%DGS, SM%DGSI, SM%O, SM%S, &
+                             HPROGRAM)
+!
+!*       1.1    Reading of configuration:
+!               -------------------------
+!
+ CALL READ_SEAFLUX_CONF_n(SM%CHS, SM%DGO, SM%DGS, SM%DGSI, SM%O, SM%S, &
+                          HPROGRAM)
+!
+SM%S%LINTERPOL_SST=.FALSE.
+SM%S%LINTERPOL_SSS=.FALSE.
+SM%S%LINTERPOL_SIC=.FALSE.
+SM%S%LINTERPOL_SIT=.FALSE.
+IF(LCPL_SEA)THEN 
+  IF(SM%DGS%N2M<1)THEN
+     CALL ABOR1_SFX('INIT_SEAFLUX_n: N2M must be set >0 in case of LCPL_SEA')
+  ENDIF
+! No STT / SSS interpolation in Earth System Model
+  SM%S%CINTERPOL_SST='NONE  '
+  SM%S%CINTERPOL_SSS='NONE  '
+  SM%S%CINTERPOL_SIC='NONE  '
+  SM%S%CINTERPOL_SIT='NONE  '
+ELSE
+   IF(TRIM(SM%S%CINTERPOL_SST)/='NONE')THEN
+      SM%S%LINTERPOL_SST=.TRUE.
+   ENDIF
+   IF(TRIM(SM%S%CINTERPOL_SSS)/='NONE')THEN
+      SM%S%LINTERPOL_SSS=.TRUE.
+   ENDIF
+   IF(TRIM(SM%S%CINTERPOL_SIC)/='NONE')THEN
+      SM%S%LINTERPOL_SIC=.TRUE.
+   ENDIF
+   IF(TRIM(SM%S%CINTERPOL_SIT)/='NONE')THEN
+      SM%S%LINTERPOL_SIT=.TRUE.
+   ENDIF
+ENDIF
+!
+!*       1.     Cover fields and grid:
+!               ---------------------
+!* date
+!
+SELECT CASE (HINIT)
+!
+  CASE ('PGD')
+!
+    SM%S%TTIME%TDATE%YEAR = NUNDEF
+    SM%S%TTIME%TDATE%MONTH= NUNDEF
+    SM%S%TTIME%TDATE%DAY  = NUNDEF
+    SM%S%TTIME%TIME       = XUNDEF
+!
+  CASE ('PRE')
+!
+    CALL PREP_CTRL_SEAFLUX(SM%DGS%N2M,SM%DGS%LSURF_BUDGET,SM%DGS%L2M_MIN_ZS,&
+                                SM%DGS%LRAD_BUDGET,SM%DGS%LCOEF,SM%DGS%LSURF_VARS,&
+                             SM%DGO%LDIAG_OCEAN,SM%DGSI%LDIAG_SEAICE,ILUOUT,SM%DGS%LSURF_BUDGETC ) 
+    IF (LNAM_READ) CALL READ_NAM_PREP_SEAFLUX_n(HPROGRAM)      
+    CALL READ_SEAFLUX_DATE(SM%O, &
+                           HPROGRAM,HINIT,ILUOUT,HATMFILE,HATMFILETYPE,KYEAR,KMONTH,KDAY,PTIME,SM%S%TTIME)
+!
+  CASE DEFAULT
+!
+ CALL INIT_IO_SURF_n(DTCO, DGU, U, &
+                        HPROGRAM,'SEA   ','SEAFLX','READ ')
+    CALL READ_SURF(&
+                   HPROGRAM,'DTCUR',SM%S%TTIME,IRESP)
+    CALL END_IO_SURF_n(HPROGRAM)
+!
+END SELECT
+!
+!-----------------------------------------------------------------------------------------------------
+! READ PGD FILE
+!-----------------------------------------------------------------------------------------------------
+!
+!         Initialisation for IO
+!
+ CALL SET_SURFEX_FILEIN(HPROGRAM,'PGD ') ! change input file name to pgd name
+ CALL INIT_IO_SURF_n(DTCO, DGU, U, &
+                        HPROGRAM,'SEA   ','SEAFLX','READ ')
+!
+!         Reading of the fields
+!
+ CALL READ_PGD_SEAFLUX_n(DTCO, SM%DTS, SM%SG, SM%S, U,GCP, &
+                         HPROGRAM)
+!
+ CALL END_IO_SURF_n(HPROGRAM)
+ CALL SET_SURFEX_FILEIN(HPROGRAM,'PREP') ! restore input file name
+!-------------------------------------------------------------------------------
+!
+!* if only physiographic fields are to be initialized, stop here.
+!
+IF (HINIT/='ALL' .AND. HINIT/='SOD') THEN
+  IF (LHOOK) CALL DR_HOOK('INIT_SEAFLUX_N',1,ZHOOK_HANDLE)
+  RETURN
+END IF
+!
+!-------------------------------------------------------------------------------
+!
+!         Initialisation for IO
+!
+ CALL INIT_IO_SURF_n(DTCO, DGU, U, &
+                        HPROGRAM,'SEA   ','SEAFLX','READ ')
+!
+!*       2.     Prognostic fields:
+!               ----------------
+!
+IF(SM%S%LINTERPOL_SST.OR.SM%S%LINTERPOL_SSS.OR.SM%S%LINTERPOL_SIC.OR.SM%S%LINTERPOL_SIT)THEN
+!  Initialize current Month for SST interpolation
+   SM%S%TZTIME%TDATE%YEAR  = SM%S%TTIME%TDATE%YEAR
+   SM%S%TZTIME%TDATE%MONTH = SM%S%TTIME%TDATE%MONTH
+   SM%S%TZTIME%TDATE%DAY   = SM%S%TTIME%TDATE%DAY
+   SM%S%TZTIME%TIME        = SM%S%TTIME%TIME        
+ENDIF
+!
+ CALL READ_SEAFLUX_n(DTCO, SM%SG, SM%S, U, &
+                     HPROGRAM,ILUOUT)
+!
+IF (HINIT/='ALL') THEN
+  CALL END_IO_SURF_n(HPROGRAM)
+  IF (LHOOK) CALL DR_HOOK('INIT_SEAFLUX_N',1,ZHOOK_HANDLE)
+  RETURN
+END IF
+!-------------------------------------------------------------------------------
+!
+!*       2.1    Ocean fields:
+!               -------------
+!
+ CALL READ_OCEAN_n(DTCO, SM%O, SM%OR, U, &
+                   HPROGRAM)
+!
+!-------------------------------------------------------------------------------
+!
+ILU = SIZE(SM%S%XCOVER,1)
+!
+ALLOCATE(SM%S%XSST_INI    (ILU))
+SM%S%XSST_INI(:) = SM%S%XSST(:)
+!
+ALLOCATE(SM%S%XZ0H(ILU))
+WHERE (SM%S%XSST(:)>=XTTS)
+  SM%S%XZ0H(:) = SM%S%XZ0(:)
+ELSEWHERE
+  SM%S%XZ0H(:) = XZ0HSN
+ENDWHERE
+!
+!-------------------------------------------------------------------------------
+!
+!*       3.     Specific fields when using earth system model or sea-ice scheme
+!               (Sea current and Sea-ice temperature)
+!               -----------------------------------------------------------------
+!
+IF(LCPL_SEA .OR. SM%S%LHANDLE_SIC .OR. LCPL_WAVE)THEN
+  ALLOCATE(SM%S%XUMER   (ILU))
+  ALLOCATE(SM%S%XVMER   (ILU))
+  SM%S%XUMER   (:)=0
+  SM%S%XVMER   (:)=0
+!
+ELSE
+  ALLOCATE(SM%S%XUMER   (0))
+  ALLOCATE(SM%S%XVMER   (0))
+ENDIF
+!
+IF(LCPL_WAVE) THEN
+  ALLOCATE(SM%S%XCHARN  (ILU))
+  SM%S%XCHARN  (:)=0.011
+ELSE
+  ALLOCATE(SM%S%XCHARN   (0))
+ENDIF
+!
+IF(LCPL_SEAICE.OR.SM%S%LHANDLE_SIC)THEN       
+  ALLOCATE(SM%S%XTICE   (ILU))
+  ALLOCATE(SM%S%XICE_ALB(ILU))
+  SM%S%XTICE   (:)=XUNDEF
+  SM%S%XICE_ALB(:)=XUNDEF
+ELSE
+  ALLOCATE(SM%S%XTICE   (0))
+  ALLOCATE(SM%S%XICE_ALB(0))
+ENDIF
+!
+!-------------------------------------------------------------------------------
+!
+!*       4.     Seaice prognostic variables and forcings :
+!
+ CALL READ_SEAICE_n(&
+                   SM%SG, SM%S, &
+                   HPROGRAM,ILU,ILUOUT)
+!
+!-------------------------------------------------------------------------------
+!
+!*       5.     Albedo, emissivity and temperature fields on the mix (open sea + sea ice)
+!               -----------------------------------------------------------------
+!
+ALLOCATE(SM%S%XEMIS    (ILU))
+SM%S%XEMIS    = 0.0
+!
+ CALL UPDATE_RAD_SEA(SM%S%CSEA_ALB,SM%S%XSST,PZENITH,XTTS,SM%S%XEMIS,SM%S%XDIR_ALB,&
+                    SM%S%XSCA_ALB,PDIR_ALB,PSCA_ALB,PEMIS,PTSRAD,  &
+                    SM%S%LHANDLE_SIC,SM%S%XTICE,SM%S%XSIC,SM%S%XICE_ALB           )  
+!
+IF (SM%S%LHANDLE_SIC) THEN
+   PTSURF(:) = SM%S%XSST(:) * ( 1 - SM%S%XSIC(:)) + SM%S%XTICE(:) * SM%S%XSIC(:)
+ELSE
+   PTSURF(:) = SM%S%XSST(:)
+ENDIF
+!
+!-------------------------------------------------------------------------------
+!
+!*       6.     SBL air fields:
+!               --------------
+!
+ CALL READ_SEAFLUX_SBL_n(DTCO, SM%S, SM%SSB, U, &
+                         HPROGRAM)
+!
+!-------------------------------------------------------------------------------
+!
+!*       7.     Chemistry /dust
+!               ---------
+!
+ CALL INIT_CHEMICAL_n(ILUOUT, KSV, HSV, SM%CHS%SVS,     &
+                     SM%CHS%CCH_NAMES, SM%CHS%CAER_NAMES,     &
+                     HDSTNAMES=SM%CHS%CDSTNAMES, HSLTNAMES=SM%CHS%CSLTNAMES        )
+!
+!* deposition scheme
+!
+IF (SM%CHS%SVS%NBEQ>0 .AND. SM%CHS%CCH_DRY_DEP=='WES89') THEN
+  ALLOCATE(SM%CHS%XDEP(ILU,SM%CHS%SVS%NBEQ))
+ELSE
+  ALLOCATE(SM%CHS%XDEP(0,0))
+END IF
+!
+!-------------------------------------------------------------------------------
+!
+!*       8.     diagnostics initialization
+!               --------------------------
+!
+IF(.NOT.(SM%S%LHANDLE_SIC.OR.LCPL_SEAICE))THEN
+  SM%DGSI%LDIAG_SEAICE=.FALSE.
+ENDIF
+!
+ CALL DIAG_SEAFLUX_INIT_n(&
+                         SM%DGO, SM%DGS, SM%DGSI, DGU, SM%S, &
+                         HPROGRAM,ILU,KSW)
+!
+!-------------------------------------------------------------------------------
+!
+!         End of IO
+!
+ CALL END_IO_SURF_n(HPROGRAM)
+IF (LHOOK) CALL DR_HOOK('INIT_SEAFLUX_N',1,ZHOOK_HANDLE)
+!
+!
+END SUBROUTINE INIT_SEAFLUX_n
diff --git a/src/ARCH_SRC/CPL_WAVE/SURFEX/modd_prep_seaflux.F90 b/src/ARCH_SRC/CPL_WAVE/SURFEX/modd_prep_seaflux.F90
new file mode 100644
index 0000000000000000000000000000000000000000..9b034aea44417479d0b9acab8451416043729f9b
--- /dev/null
+++ b/src/ARCH_SRC/CPL_WAVE/SURFEX/modd_prep_seaflux.F90
@@ -0,0 +1,57 @@
+!SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence
+!SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!SFX_LIC for details. version 1.
+!     ################
+      MODULE MODD_PREP_SEAFLUX
+!     ################
+!
+!!****  *MODD_PREP_SEAFLUX - declaration for field interpolations
+!!
+!!    PURPOSE
+!!    -------
+!     Declaration of surface parameters
+!
+!!
+!!**  IMPLICIT ARGUMENTS
+!!    ------------------
+!!      None 
+!!
+!!    REFERENCE
+!!    ---------
+!!
+!!    AUTHOR
+!!    ------
+!!      S.Malardel    *Meteo France*
+!!
+!!    MODIFICATIONS
+!!    -------------
+!!      Original       10/03
+!!      Modified     09/2013 : S. Senesi : introduce variables for sea-ice model
+!!      Modified     03/2014 : M.N. Bouin  ! possibility of wave parameters
+!!                                         ! from external source
+!
+!*       0.   DECLARATIONS
+!             ------------
+!
+IMPLICIT NONE
+!
+SAVE
+!--------------------------------------------------------------------------
+!
+CHARACTER(LEN=28) :: CFILE_SEAFLX   ! input file name
+CHARACTER(LEN=6)  :: CTYPE_SEAFLX   ! input file type
+CHARACTER(LEN=28) :: CFILEWAVE_SEAFLX   ! input file name wave parameters
+CHARACTER(LEN=6)  :: CTYPEWAVE      ! file type for wave parameters
+CHARACTER(LEN=28) :: CFILEPGD_SEAFLX   ! input file name
+CHARACTER(LEN=6)  :: CTYPEPGD          ! input file type
+!
+REAL              :: XSST_UNIF   !  uniform prescribed SST
+REAL              :: XSSS_UNIF   !  uniform prescribed SSS
+REAL              :: XSIC_UNIF   !  uniform prescribed Seaice cover
+!
+!--------------------------------------------------------------------------
+!
+END MODULE MODD_PREP_SEAFLUX
+
+
diff --git a/src/ARCH_SRC/CPL_WAVE/SURFEX/modd_seafluxn.F90 b/src/ARCH_SRC/CPL_WAVE/SURFEX/modd_seafluxn.F90
new file mode 100644
index 0000000000000000000000000000000000000000..e91b7404cb4fc1ab4b4ae115ecf1607e8533d261
--- /dev/null
+++ b/src/ARCH_SRC/CPL_WAVE/SURFEX/modd_seafluxn.F90
@@ -0,0 +1,250 @@
+!SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence
+!SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!SFX_LIC for details. version 1.
+!     #################
+      MODULE MODD_SEAFLUX_n
+!     #################
+!
+!!****  *MODD_SEAFLUX_n - declaration of surface parameters for an inland water surface
+!!
+!!    PURPOSE
+!!    -------
+!     Declaration of surface parameters
+!
+!!
+!!**  IMPLICIT ARGUMENTS
+!!    ------------------
+!!      None 
+!!
+!!    REFERENCE
+!!    ---------
+!!
+!!    AUTHOR
+!!    ------
+!!      V. Masson   *Meteo France*
+!!
+!!    MODIFICATIONS
+!!    -------------
+!!      Original      01/2004
+!!      S. Senesi     01/2014  adapt to fractional seaice, and to seaice scheme
+!!      S. Belamari   03/2014  Include NZ0
+!!      Modified      03/2014 : M.N. Bouin  ! possibility of wave parameters
+!!                                        ! from external source
+!!      Modified      11/2014 : J. Pianezze ! add surface pressure, evap-rain and charnock coefficient
+!
+!*       0.   DECLARATIONS
+!             ------------
+!
+USE MODD_SURF_PAR,   ONLY : XUNDEF
+USE MODD_TYPE_DATE_SURF
+!
+USE MODD_TYPES_GLT,   ONLY : T_GLT
+!
+!
+USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
+USE PARKIND1  ,ONLY : JPRB
+!
+IMPLICIT NONE
+
+TYPE SEAFLUX_t
+!
+! General surface: 
+!
+  REAL, POINTER, DIMENSION(:)   :: XZS     ! orography
+  REAL, POINTER, DIMENSION(:,:) :: XCOVER  ! fraction of each ecosystem       (-)
+  LOGICAL, POINTER, DIMENSION(:):: LCOVER  ! GCOVER(i)=T --> ith cover field is not 0.
+  LOGICAL                       :: LSBL    ! T: SBL scheme between sea and atm. forcing level
+!                                          ! F: no atmospheric layers below forcing level      
+  LOGICAL                       :: LHANDLE_SIC ! T: we do weight seaice and open sea fluxes
+  CHARACTER(LEN=6)              :: CSEAICE_SCHEME! Name of the seaice scheme 
+  REAL, POINTER, DIMENSION(:)   :: XSEABATHY   ! bathymetry
+!
+  LOGICAL                       :: LINTERPOL_SST ! Interpolation of monthly SST
+  CHARACTER(LEN=6)              :: CINTERPOL_SST ! Interpolation method of monthly SST
+  LOGICAL                       :: LINTERPOL_SSS ! Interpolation of monthly SSS
+  CHARACTER(LEN=6)              :: CINTERPOL_SSS ! Interpolation method of monthly SSS
+  LOGICAL                       :: LINTERPOL_SIC ! Interpolation of monthly SIC
+  CHARACTER(LEN=6)              :: CINTERPOL_SIC ! Interpolation method of monthly SIC
+  LOGICAL                       :: LINTERPOL_SIT ! Interpolation of monthly SIT
+  CHARACTER(LEN=6)              :: CINTERPOL_SIT ! Interpolation method of monthly SIT
+  REAL                          :: XFREEZING_SST ! Value marking frozen sea in SST data
+  REAL                          :: XSIC_EFOLDING_TIME ! For damping of SIC (days)
+  REAL                          :: XSIT_EFOLDING_TIME ! For damping of SIT (days)
+  REAL                          :: XSEAICE_TSTEP ! Sea ice model time step
+  REAL                          :: XCD_ICE_CST   ! Turbulent exchange coefficient for seaice
+  REAL                          :: XSI_FLX_DRV   ! Derivative of fluxes on seaice w.r.t to the temperature (W m-2 K-1)
+  
+!
+! Type of formulation for the fluxes
+!
+  CHARACTER(LEN=6)                  :: CSEA_FLUX   ! type of flux computation
+  CHARACTER(LEN=4)                  :: CSEA_ALB    ! type of albedo
+  LOGICAL                           :: LPWG        ! flag for gust
+  LOGICAL                           :: LPRECIP     ! flag for precip correction
+  LOGICAL                           :: LPWEBB      ! flag for Webb correction
+  INTEGER                           :: NZ0         ! set to 0,1 or 2 according to Z0 formulation
+                                                   ! 0= ARPEGE / 1= Smith (1988) / 2= Direct
+  INTEGER                           :: NGRVWAVES   ! set to 0,1 or 2 according to the 
+                                                   ! gravity waves model used in coare30_flux
+  LOGICAL                           :: LWAVEWIND    ! wave parameters computed from wind only
+  REAL                              :: XICHCE      ! CE coef calculation for ECUME
+  LOGICAL                           :: LPERTFLUX   ! flag for stochastic flux perturbation
+!
+! Sea/Ocean:
+!
+  REAL, POINTER, DIMENSION(:) :: XSST    ! sea surface temperature
+  REAL, POINTER, DIMENSION(:) :: XSSS    ! sea surface salinity
+  REAL, POINTER, DIMENSION(:) :: XHS     ! significant wave height
+  REAL, POINTER, DIMENSION(:) :: XTP     ! wave peak period
+  REAL, POINTER, DIMENSION(:) :: XTICE   ! sea ice temperature
+  REAL, POINTER, DIMENSION(:) :: XSIC    ! sea ice concentration ( constraint for seaice scheme )
+  REAL, POINTER, DIMENSION(:) :: XSST_INI! initial sea surface temperature
+  REAL, POINTER, DIMENSION(:) :: XZ0     ! roughness length
+  REAL, POINTER, DIMENSION(:) :: XZ0H    ! roughness length for heat
+  REAL, POINTER, DIMENSION(:) :: XEMIS   ! emissivity
+  REAL, POINTER, DIMENSION(:) :: XDIR_ALB! direct albedo
+  REAL, POINTER, DIMENSION(:) :: XSCA_ALB! diffuse albedo
+  REAL, POINTER, DIMENSION(:) :: XICE_ALB! sea-ice albedo from seaice model (ESM or embedded)
+  REAL, POINTER, DIMENSION(:) :: XUMER   ! U component of sea current (for ESM coupling)
+  REAL, POINTER, DIMENSION(:) :: XVMER   ! V component of sea current (for ESM coupling)
+!
+  REAL, POINTER, DIMENSION(:,:) :: XSST_MTH! monthly sea surface temperature (precedent, current and next)
+  REAL, POINTER, DIMENSION(:,:) :: XSSS_MTH! monthly sea surface salinity    (precedent, current and next)
+  REAL, POINTER, DIMENSION(:,:) :: XSIC_MTH! monthly sea ice cover           (precedent, current and next)
+  REAL, POINTER, DIMENSION(:,:) :: XSIT_MTH! monthly sea ice thickness       (precedent, current and next)
+  REAL, POINTER, DIMENSION(:)   :: XFSIC   ! nudging (or forcing) sea ice cover
+  REAL, POINTER, DIMENSION(:)   :: XFSIT   ! nudging sea ice thickness
+!
+  REAL, POINTER, DIMENSION(:) :: XCHARN  ! Charnock coefficient (for ESM coupling)
+!
+  REAL, POINTER, DIMENSION(:) :: XCPL_SEA_WIND ! 10m wind speed for ESM coupling
+  REAL, POINTER, DIMENSION(:) :: XCPL_SEA_FWSU ! zonal wind stress for ESM coupling
+  REAL, POINTER, DIMENSION(:) :: XCPL_SEA_FWSV ! meridian wind stress for ESM coupling
+  REAL, POINTER, DIMENSION(:) :: XCPL_SEA_SNET ! Solar net heat flux
+  REAL, POINTER, DIMENSION(:) :: XCPL_SEA_HEAT ! Non solar net heat flux
+  REAL, POINTER, DIMENSION(:) :: XCPL_SEA_EVAP ! Evaporation for ESM coupling
+  REAL, POINTER, DIMENSION(:) :: XCPL_SEA_RAIN ! Rainfall for ESM coupling
+  REAL, POINTER, DIMENSION(:) :: XCPL_SEA_EVPR ! Evaporatrion - Rainfall for ESM coupling
+  REAL, POINTER, DIMENSION(:) :: XCPL_SEA_SNOW ! Snowfall for ESM coupling
+  REAL, POINTER, DIMENSION(:) :: XCPL_SEA_FWSM ! wind stress for ESM coupling
+  REAL, POINTER, DIMENSION(:) :: XCPL_SEA_PRES ! Surface pressure for ESM coupling
+!  
+  REAL, POINTER, DIMENSION(:) :: XCPL_SEAICE_SNET ! Solar net heat flux for ESM coupling
+  REAL, POINTER, DIMENSION(:) :: XCPL_SEAICE_HEAT ! Non solar net heat flux
+  REAL, POINTER, DIMENSION(:) :: XCPL_SEAICE_EVAP ! Ice sublimation for ESM coupling
+!
+  REAL, POINTER, DIMENSION(:) :: XPERTFLUX     ! Stochastic flux perturbation pattern
+!
+! Sea-ice :
+!
+  TYPE(T_GLT)                           :: TGLT ! Sea-ice state , diagnostics and auxilliaries
+                                             ! for the case of embedded Gelato Seaice model
+!
+! Date:
+!
+  TYPE (DATE_TIME)                      :: TTIME   ! current date and time
+  TYPE (DATE_TIME)                      :: TZTIME  
+  LOGICAL                               :: LTZTIME_DONE
+  INTEGER                               :: JSX  
+!
+! Time-step:
+!
+  REAL                                  :: XTSTEP  ! time step
+!
+  REAL                                  :: XOUT_TSTEP  ! output writing time step
+!
+!
+!
+END TYPE SEAFLUX_t
+
+
+
+CONTAINS
+
+!
+
+
+
+
+SUBROUTINE SEAFLUX_INIT(YSEAFLUX)
+TYPE(SEAFLUX_t), INTENT(INOUT) :: YSEAFLUX
+REAL(KIND=JPRB) :: ZHOOK_HANDLE
+IF (LHOOK) CALL DR_HOOK("MODD_SEAFLUX_N:SEAFLUX_INIT",0,ZHOOK_HANDLE)
+  NULLIFY(YSEAFLUX%XZS)
+  NULLIFY(YSEAFLUX%XCOVER)
+  NULLIFY(YSEAFLUX%LCOVER)
+  NULLIFY(YSEAFLUX%XSEABATHY)
+  NULLIFY(YSEAFLUX%XSST)
+  NULLIFY(YSEAFLUX%XSSS)
+  NULLIFY(YSEAFLUX%XSIC)
+  NULLIFY(YSEAFLUX%XHS)
+  NULLIFY(YSEAFLUX%XTP)
+  NULLIFY(YSEAFLUX%XTICE)
+  NULLIFY(YSEAFLUX%XSST_INI)
+  NULLIFY(YSEAFLUX%XZ0)
+  NULLIFY(YSEAFLUX%XZ0H)
+  NULLIFY(YSEAFLUX%XEMIS)
+  NULLIFY(YSEAFLUX%XDIR_ALB)
+  NULLIFY(YSEAFLUX%XSCA_ALB)
+  NULLIFY(YSEAFLUX%XICE_ALB)
+  NULLIFY(YSEAFLUX%XUMER)
+  NULLIFY(YSEAFLUX%XVMER)
+  NULLIFY(YSEAFLUX%XCHARN)
+  NULLIFY(YSEAFLUX%XSST_MTH)
+  NULLIFY(YSEAFLUX%XSSS_MTH)
+  NULLIFY(YSEAFLUX%XSIC_MTH)
+  NULLIFY(YSEAFLUX%XSIT_MTH)
+  NULLIFY(YSEAFLUX%XFSIC)
+  NULLIFY(YSEAFLUX%XFSIT)
+  NULLIFY(YSEAFLUX%XCPL_SEA_WIND)
+  NULLIFY(YSEAFLUX%XCPL_SEA_FWSU)
+  NULLIFY(YSEAFLUX%XCPL_SEA_FWSV)
+  NULLIFY(YSEAFLUX%XCPL_SEA_SNET)
+  NULLIFY(YSEAFLUX%XCPL_SEA_HEAT)
+  NULLIFY(YSEAFLUX%XCPL_SEA_EVAP)
+  NULLIFY(YSEAFLUX%XCPL_SEA_RAIN)
+  NULLIFY(YSEAFLUX%XCPL_SEA_EVPR)
+  NULLIFY(YSEAFLUX%XCPL_SEA_SNOW)
+  NULLIFY(YSEAFLUX%XCPL_SEA_FWSM)
+  NULLIFY(YSEAFLUX%XCPL_SEA_PRES)
+  NULLIFY(YSEAFLUX%XCPL_SEAICE_SNET)
+  NULLIFY(YSEAFLUX%XCPL_SEAICE_HEAT)
+  NULLIFY(YSEAFLUX%XCPL_SEAICE_EVAP)
+  NULLIFY(YSEAFLUX%XPERTFLUX)
+YSEAFLUX%LSBL=.FALSE.
+YSEAFLUX%LHANDLE_SIC=.FALSE.
+YSEAFLUX%CSEAICE_SCHEME='NONE  '
+YSEAFLUX%LINTERPOL_SST=.FALSE.
+YSEAFLUX%CINTERPOL_SST=' '
+YSEAFLUX%LINTERPOL_SSS=.FALSE.
+YSEAFLUX%CINTERPOL_SSS=' '
+YSEAFLUX%LINTERPOL_SIC=.FALSE.
+YSEAFLUX%CINTERPOL_SIC=' '
+YSEAFLUX%LINTERPOL_SIT=.FALSE.
+YSEAFLUX%CINTERPOL_SIT=' '
+YSEAFLUX%XFREEZING_SST=-1.8
+YSEAFLUX%XSIC_EFOLDING_TIME=0. ! means : no damping
+YSEAFLUX%XSIT_EFOLDING_TIME=0. ! means : no damping
+YSEAFLUX%XSEAICE_TSTEP=XUNDEF 
+YSEAFLUX%XCD_ICE_CST=0.
+YSEAFLUX%XSI_FLX_DRV=-20. 
+YSEAFLUX%CSEA_FLUX=' '
+YSEAFLUX%CSEA_ALB=' '
+YSEAFLUX%LPWG=.FALSE.
+YSEAFLUX%LPRECIP=.FALSE.
+YSEAFLUX%LPWEBB=.FALSE.
+YSEAFLUX%NZ0=0
+YSEAFLUX%NGRVWAVES=0
+YSEAFLUX%LWAVEWIND=.TRUE.
+YSEAFLUX%XICHCE=0.
+YSEAFLUX%LPERTFLUX=.FALSE.
+YSEAFLUX%JSX=0
+YSEAFLUX%LTZTIME_DONE = .FALSE.
+YSEAFLUX%XTSTEP=0.
+YSEAFLUX%XOUT_TSTEP=0.
+IF (LHOOK) CALL DR_HOOK("MODD_SEAFLUX_N:SEAFLUX_INIT",1,ZHOOK_HANDLE)
+END SUBROUTINE SEAFLUX_INIT
+
+
+END MODULE MODD_SEAFLUX_n
diff --git a/src/ARCH_SRC/CPL_WAVE/SURFEX/modd_sfx_oasis.F90 b/src/ARCH_SRC/CPL_WAVE/SURFEX/modd_sfx_oasis.F90
new file mode 100755
index 0000000000000000000000000000000000000000..71fc9d50c9a9953da06a7adefe4da31b16a4a9b8
--- /dev/null
+++ b/src/ARCH_SRC/CPL_WAVE/SURFEX/modd_sfx_oasis.F90
@@ -0,0 +1,152 @@
+!SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence
+!SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!SFX_LIC for details. version 1.
+!###############
+MODULE MODD_SFX_OASIS
+!###############
+!
+!!****  *MODD_SFX_OASIS - declaration of variable for SFX-OASIS coupling
+!!
+!!    PURPOSE
+!!    -------
+!
+!!
+!!**  IMPLICIT ARGUMENTS
+!!    ------------------
+!!      None 
+!!
+!!    REFERENCE
+!!    ---------
+!!
+!!    AUTHOR
+!!    ------
+!!      B. Decharme   *Meteo France*
+!!
+!!    MODIFICATIONS
+!!    -------------
+!!      Original       10/13
+!!      Modified       11/2014 : J. Pianezze - add wave coupling and creation of OASIS grids
+!
+!*       0.   DECLARATIONS
+!             ------------
+!
+IMPLICIT NONE
+!
+!-------------------------------------------------------------------------------
+!
+! * Surfex - Oasis coupling general key :
+!
+!-------------------------------------------------------------------------------
+!
+LOGICAL             :: LOASIS   = .FALSE. ! To use oasis coupler or not
+LOGICAL             :: LOASIS_GRID = .FALSE. ! To define oasis grids, areas and masks during simulation
+REAL                :: XRUNTIME = 0.0     ! Total simulated time in oasis namcouple (s)
+!
+!-------------------------------------------------------------------------------
+!
+! * Land surface variables for Surfex - Oasis coupling
+!
+!-------------------------------------------------------------------------------
+!
+LOGICAL             :: LCPL_LAND    = .FALSE. ! Fields to/from surfex land area
+LOGICAL             :: LCPL_CALVING = .FALSE. ! Calving flux from surfex land area
+LOGICAL             :: LCPL_GW      = .FALSE. ! Fields to/from surfex land area to/from groundwater scheme
+LOGICAL             :: LCPL_FLOOD   = .FALSE. ! Fields to/from surfex land area to/from floodplains scheme
+!
+! Output variables
+!
+INTEGER             :: NRUNOFF_ID    ! Surface runoff id
+INTEGER             :: NDRAIN_ID     ! Drainage id
+INTEGER             :: NCALVING_ID   ! Calving flux id
+INTEGER             :: NRECHARGE_ID  ! Groundwater recharge id
+INTEGER             :: NSRCFLOOD_ID  ! Floodplains freshwater flux id
+!
+! Input variables
+!
+INTEGER             :: NWTD_ID       ! water table depth id
+INTEGER             :: NFWTD_ID      ! grid-cell fraction of water table rise id
+INTEGER             :: NFFLOOD_ID    ! Floodplains fraction id
+INTEGER             :: NPIFLOOD_ID   ! Potential flood infiltration id
+!
+!-------------------------------------------------------------------------------
+!
+! * Lake variables for Surfex - Oasis coupling
+!
+!-------------------------------------------------------------------------------
+!
+LOGICAL             :: LCPL_LAKE    = .FALSE. ! Fields to/from surfex lake area
+!
+! Output variables
+!
+INTEGER             :: NLAKE_EVAP_ID ! Evaporation id
+INTEGER             :: NLAKE_RAIN_ID ! Rainfall id
+INTEGER             :: NLAKE_SNOW_ID ! Snowfall id
+INTEGER             :: NLAKE_WATF_ID ! Freshwater id
+!
+!-------------------------------------------------------------------------------
+!
+! * Sea variables for Surfex - Oasis coupling 
+!
+!-------------------------------------------------------------------------------
+!
+LOGICAL             :: LCPL_SEA     = .FALSE. ! Fields to/from surfex sea/water area
+LOGICAL             :: LCPL_SEAICE  = .FALSE. ! Fields to/from surfex sea-ice area (e.g. GELATO 3D, ...)
+!
+! Sea Output variables
+!
+INTEGER             :: NSEA_FWSU_ID ! zonal wind stress id
+INTEGER             :: NSEA_FWSV_ID ! meridian wind stress id
+INTEGER             :: NSEA_HEAT_ID ! Non solar net heat flux id
+INTEGER             :: NSEA_SNET_ID ! Solar net heat flux id
+INTEGER             :: NSEA_WIND_ID ! 10m wind speed id
+INTEGER             :: NSEA_FWSM_ID ! wind stress id
+INTEGER             :: NSEA_EVAP_ID ! Evaporation id
+INTEGER             :: NSEA_RAIN_ID ! Rainfall id
+INTEGER             :: NSEA_SNOW_ID ! Snowfall id
+INTEGER             :: NSEA_EVPR_ID ! Evap.-Precip. id
+INTEGER             :: NSEA_WATF_ID ! Freshwater id
+INTEGER             :: NSEA_PRES_ID ! Surface pressure id
+!
+! Sea-ice Output variables
+!
+INTEGER             :: NSEAICE_HEAT_ID ! Sea-ice non solar net heat flux id
+INTEGER             :: NSEAICE_SNET_ID ! Sea-ice solar net heat flux id
+INTEGER             :: NSEAICE_EVAP_ID ! Sea-ice sublimation id
+!
+! Sea Input variables
+!
+INTEGER             :: NSEA_SST_ID ! Sea surface temperature id
+INTEGER             :: NSEA_UCU_ID ! Sea u-current stress id
+INTEGER             :: NSEA_VCU_ID ! Sea v-current stress id
+!
+! Sea-ice Input variables
+!
+INTEGER             :: NSEAICE_SIT_ID  ! Sea-ice Temperature id
+INTEGER             :: NSEAICE_CVR_ID  ! Sea-ice cover id
+INTEGER             :: NSEAICE_ALB_ID  ! Sea-ice albedo id
+!
+!-------------------------------------------------------------------------------
+!
+! * Wave variables for Surfex - Oasis coupling 
+!
+!-------------------------------------------------------------------------------
+!
+LOGICAL             :: LCPL_WAVE    = .FALSE. ! Fields to/from surfex wave area
+!
+! Wave Output variables
+!
+INTEGER             :: NWAVE_U10_ID ! 10m u-wind speed id
+INTEGER             :: NWAVE_V10_ID ! 10m v-wind speed id
+!
+! Wave Input variables
+!
+INTEGER             :: NWAVE_CHA_ID ! Charnock coefficient id
+INTEGER             :: NWAVE_UCU_ID ! Wave u-current velocity id
+INTEGER             :: NWAVE_VCU_ID ! Wave v-current velocity id
+INTEGER             :: NWAVE_HS_ID  ! Significant wave height id
+INTEGER             :: NWAVE_TP_ID  ! Peak period id
+!
+!-------------------------------------------------------------------------------
+!
+END MODULE MODD_SFX_OASIS
diff --git a/src/ARCH_SRC/CPL_WAVE/SURFEX/mode_read_netcdf_mercator.F90 b/src/ARCH_SRC/CPL_WAVE/SURFEX/mode_read_netcdf_mercator.F90
new file mode 100644
index 0000000000000000000000000000000000000000..5fb4c686ff587c7e29476013c8a9175d74e8f250
--- /dev/null
+++ b/src/ARCH_SRC/CPL_WAVE/SURFEX/mode_read_netcdf_mercator.F90
@@ -0,0 +1,1455 @@
+!SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence
+!SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!SFX_LIC for details. version 1.
+!!
+!!      Modified    09/2013 : S. Senesi : adapt READ_NETCDF_SST to read 2D fields other than SST
+!!
+MODULE MODE_READ_NETCDF_MERCATOR
+!!!=============================================================================
+!!      Modified    03/2014 : M.N. Bouin  ! possibility of wave parameters
+!!                                        ! from external source 
+!!                                        ! + correction of 2 bugs
+!-------------------------------------------------------------------------------
+!
+!
+USE MODI_ABOR1_SFX
+!
+USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
+USE PARKIND1  ,ONLY : JPRB
+!
+CONTAINS
+!-------------------------------------------------------------------
+!-------------------------------------------------------------------
+!     ####################
+      SUBROUTINE HANDLE_ERR_MER(status,line)
+!     ####################
+IMPLICIT NONE
+INTEGER, INTENT(IN)           :: status
+ CHARACTER(LEN=80), INTENT(IN) :: line
+REAL(KIND=JPRB) :: ZHOOK_HANDLE
+!
+include 'netcdf.inc'
+!
+IF (LHOOK) CALL DR_HOOK('MODE_READ_NETCDF_MERCATOR:HANDLE_ERR_MER',0,ZHOOK_HANDLE)
+IF (status /= NF_NOERR) THEN
+  CALL ABOR1_SFX('MODE_READ_NETCDF_MERCATOR: HANDLE_ERR_MER')
+END IF
+IF (LHOOK) CALL DR_HOOK('MODE_READ_NETCDF_MERCATOR:HANDLE_ERR_MER',1,ZHOOK_HANDLE)
+END SUBROUTINE HANDLE_ERR_MER
+!-------------------------------------------------------------------
+!-------------------------------------------------------------------
+!     ####################
+      SUBROUTINE GET1DCDF(KCDF_ID,IDVAR,PMISSVALUE,PVALU1D)
+!     ####################
+!
+IMPLICIT NONE
+!
+INTEGER,INTENT(IN) :: KCDF_ID !netcdf file identifiant
+INTEGER,INTENT(IN) :: IDVAR   !variable to read identifiant
+REAL, INTENT(OUT) ::  PMISSVALUE !undefined value
+REAL,DIMENSION(:),INTENT(OUT) :: PVALU1D !value array
+!
+integer :: status
+character(len=80) :: HACTION
+integer,save :: NDIMS=1
+integer :: KVARTYPE
+integer,DIMENSION(:),ALLOCATABLE :: NVARDIMID,NVARDIMLEN
+character(len=80),DIMENSION(:),ALLOCATABLE :: NVARDIMNAM
+integer :: JLOOP
+integer :: NGATTS   
+character(len=80),DIMENSION(:),ALLOCATABLE :: HNAME
+REAL,DIMENSION(:),ALLOCATABLE :: ZVALU1D !value array
+REAL(KIND=JPRB) :: ZHOOK_HANDLE
+!
+include 'netcdf.inc'
+!
+IF (LHOOK) CALL DR_HOOK('MODE_READ_NETCDF_MERCATOR:GET1DCDF',0,ZHOOK_HANDLE)
+PMISSVALUE=-9999.9
+ALLOCATE(NVARDIMID (NDIMS))
+ALLOCATE(NVARDIMLEN(NDIMS))
+ALLOCATE(NVARDIMNAM(NDIMS))
+NVARDIMID (:)=0
+NVARDIMLEN(:)=0
+NVARDIMNAM(:)=' '
+!
+HACTION='get variable type'
+status=nf_inq_vartype(KCDF_ID,IDVAR,KVARTYPE)
+if (status/=NF_NOERR) CALL HANDLE_ERR_MER(status,HACTION)
+!write(0,*) 'variable type = ',KVARTYPE
+!
+HACTION='get variable dimensions name'
+status=nf_inq_dimname(KCDF_ID,IDVAR,NVARDIMNAM(NDIMS))
+if (status/=NF_NOERR) CALL HANDLE_ERR_MER(status,HACTION)
+!
+HACTION='get variable dimensions length'
+status=nf_inq_dimlen(KCDF_ID,IDVAR,NVARDIMLEN(NDIMS))
+if (status/=NF_NOERR) CALL HANDLE_ERR_MER(status,HACTION)
+!write(0,*) 'variable dimension ',NDIMS,' named ',NVARDIMNAM(NDIMS),&
+!     &'has a length of',NVARDIMLEN(NDIMS)
+!!
+HACTION='get attributs'
+status=nf_inq_varnatts(KCDF_ID,IDVAR,NGATTS)
+if (status/=NF_NOERR) CALL HANDLE_ERR_MER(status,HACTION)
+!write(0,*) 'number of attributes = ',NGATTS
+allocate(hname(1:NGATTS))
+!
+ALLOCATE(ZVALU1D(1:NVARDIMLEN(NDIMS)))
+ZVALU1D=0.
+!
+IF (KVARTYPE>=5) then
+  HACTION='get variable values (1D)'
+  status=nf_get_var_double(KCDF_ID,IDVAR,ZVALU1D(:))
+  if (status/=NF_NOERR) CALL HANDLE_ERR_MER(status,HACTION)
+ENDIF
+!
+PVALU1D(:)=ZVALU1D(:)
+!
+IF (ALLOCATED(ZVALU1D  ))  DEALLOCATE(ZVALU1D)
+IF (LHOOK) CALL DR_HOOK('MODE_READ_NETCDF_MERCATOR:GET1DCDF',1,ZHOOK_HANDLE)
+!
+END SUBROUTINE GET1DCDF
+!-------------------------------------------------------------------
+!-------------------------------------------------------------------
+!     ####################
+      SUBROUTINE GET2DCDF(KCDF_ID,IDVAR,PDIM1,HDIM1NAME,PDIM2,HDIM2NAME,&
+             PMISSVALUE,PVALU2D)  
+!     ####################
+USE MODD_SURF_PAR,         ONLY : XUNDEF
+!
+IMPLICIT NONE
+!
+INTEGER,INTENT(IN) :: KCDF_ID !netcdf file identifiant
+INTEGER,INTENT(IN) :: IDVAR   !variable to read identifiant
+REAL,DIMENSION(:),INTENT(OUT) :: PDIM1,PDIM2 !dimensions for PVALU2D array
+ CHARACTER(len=80),INTENT(OUT) :: HDIM1NAME,HDIM2NAME     !dimensions names
+REAL, INTENT(OUT) :: PMISSVALUE
+REAL,DIMENSION(:,:),INTENT(OUT) :: PVALU2D !value array
+!
+integer :: status
+character(len=80) :: HACTION
+integer,save :: NDIMS=2
+integer :: KVARTYPE
+integer,DIMENSION(:),ALLOCATABLE :: NVARDIMID,NVARDIMLEN
+character(len=80),DIMENSION(:),ALLOCATABLE :: NVARDIMNAM
+integer :: JLOOP2, JLOOP, J1, J2
+integer :: NGATTS   
+character(len=80),DIMENSION(:),ALLOCATABLE :: HNAME
+real :: ZMISS1,ZMISS2
+real :: ZSCFA, ZOFFS
+REAL,DIMENSION(:,:),ALLOCATABLE :: ZVALU2D !value array
+INTEGER,DIMENSION(:,:),ALLOCATABLE :: IVALU2D
+REAL(KIND=JPRB) :: ZHOOK_HANDLE
+!
+include 'netcdf.inc'
+!
+IF (LHOOK) CALL DR_HOOK('MODE_READ_NETCDF_MERCATOR:GET2DCDF',0,ZHOOK_HANDLE)
+PMISSVALUE=-9999.9 
+ALLOCATE(NVARDIMID (NDIMS))
+ALLOCATE(NVARDIMLEN(NDIMS))
+ALLOCATE(NVARDIMNAM(NDIMS))
+NVARDIMID (:)=0
+NVARDIMLEN(:)=0
+NVARDIMNAM(:)=' '
+!
+HACTION='get variable type'
+status=nf_inq_vartype(KCDF_ID,IDVAR,KVARTYPE)
+if (status/=NF_NOERR) CALL HANDLE_ERR_MER(status,HACTION)
+!write(0,*) 'variable type = ',KVARTYPE
+!
+HACTION='get variable dimensions identifiant'
+status=nf_inq_vardimid(KCDF_ID,IDVAR,NVARDIMID)
+if (status/=NF_NOERR) CALL HANDLE_ERR_MER(status,HACTION)
+!
+HACTION='get attributs'
+status=nf_inq_varnatts(KCDF_ID,IDVAR,NGATTS)
+if (status/=NF_NOERR) CALL HANDLE_ERR_MER(status,HACTION)
+!write(0,*) 'number of attributes = ',NGATTS
+allocate(hname(1:NGATTS))
+!
+ZSCFA=1.
+ZOFFS=0.
+DO JLOOP=1,NGATTS
+  status=nf_inq_attname(KCDF_ID,IDVAR,JLOOP,hname(JLOOP))
+  if (status/=NF_NOERR) CALL HANDLE_ERR_MER(status,HACTION)
+  !write(0,*) 'attributes names = ', hname(JLOOP)
+  if (TRIM(hname(JLOOP))=='missing_value') then
+    !write(0,*) 'missing value search '
+    HACTION='get missing value'
+    status=nf_get_att_double(KCDF_ID,IDVAR,"missing_value",PMISSVALUE)
+    if (status/=NF_NOERR) CALL HANDLE_ERR_MER(status,HACTION)
+    !write(0,*) 'missing value = ',PMISSVALUE
+  else
+    if (TRIM(hname(JLOOP))=='_FillValue') then
+      !write(0,*) 'missing value found '
+      HACTION='get _FillValue'
+      status=nf_get_att_double(KCDF_ID,IDVAR,"_FillValue",PMISSVALUE)
+      if (status/=NF_NOERR) CALL HANDLE_ERR_MER(status,HACTION)
+      !write(0,*) 'missing value = ',PMISSVALUE
+    endif    
+  endif
+  if (TRIM(hname(JLOOP))=='scale_factor') then
+    !write(0,*) 'missing value found '
+    HACTION='get scale factor'
+    status=nf_get_att_double(KCDF_ID,IDVAR,"scale_factor",ZSCFA)
+    if (status/=NF_NOERR) CALL HANDLE_ERR_MER(status,HACTION)
+    !write(0,*) 'missing value = ',PMISSVALUE
+  endif   
+  if (TRIM(hname(JLOOP))=='add_offset') then
+    !write(0,*) 'missing value found '
+    HACTION='get offset'
+    status=nf_get_att_double(KCDF_ID,IDVAR,"add_offset",ZOFFS)
+    if (status/=NF_NOERR) CALL HANDLE_ERR_MER(status,HACTION)
+    !write(0,*) 'missing value = ',PMISSVALUE
+  endif    
+ENDDO
+!
+!
+DO JLOOP2=1,NDIMS
+  HACTION='get variable dimensions name'
+  status=nf_inq_dimname(KCDF_ID,NVARDIMID(JLOOP2),NVARDIMNAM(JLOOP2))
+  if (status/=NF_NOERR) CALL HANDLE_ERR_MER(status,HACTION)
+  HACTION='get variable dimensions length'
+  status=nf_inq_dimlen(KCDF_ID,NVARDIMID(JLOOP2),NVARDIMLEN(JLOOP2))
+  if (status/=NF_NOERR) CALL HANDLE_ERR_MER(status,HACTION)
+  !write(0,*) 'variable dimension ',JLOOP2,' named ',NVARDIMNAM(JLOOP2),&
+  !     &'has a length of',NVARDIMLEN(JLOOP2)
+ENDDO
+! 
+IF (KVARTYPE>=5) then
+  ALLOCATE(ZVALU2D(1:NVARDIMLEN(1),1:NVARDIMLEN(2)))
+  ZVALU2D=0.        
+  HACTION='get variable values (2D)'
+  status=nf_get_var_double(KCDF_ID,IDVAR,ZVALU2D(:,:))
+  if (status/=NF_NOERR) CALL HANDLE_ERR_MER(status,HACTION)
+ELSE
+  ALLOCATE(IVALU2D(1:NVARDIMLEN(1),1:NVARDIMLEN(2)))
+  IVALU2D=0.         
+  HACTION='get variable values (2D)'
+  status=nf_get_var_int(KCDF_ID,IDVAR,IVALU2D(:,:))
+  if (status/=NF_NOERR) CALL HANDLE_ERR_MER(status,HACTION)  
+ENDIF
+PVALU2D(:,:)=XUNDEF
+DO J1=1,NVARDIMLEN(1)
+  DO J2=1,NVARDIMLEN(2)
+    IF (KVARTYPE>=5) THEN
+      IF (ZVALU2D(J1,J2)/=PMISSVALUE) PVALU2D(J1,J2)=ZVALU2D(J1,J2)*ZSCFA+ZOFFS
+    ELSE
+      IF (ZVALU2D(J1,J2)/=PMISSVALUE) PVALU2D(J1,J2)=IVALU2D(J1,J2)*ZSCFA+ZOFFS
+    ENDIF
+  ENDDO
+ENDDO
+!
+ CALL GET1DCDF(KCDF_ID,NVARDIMID(1),ZMISS1,PDIM1)
+ CALL GET1DCDF(KCDF_ID,NVARDIMID(2),ZMISS2,PDIM2)
+HDIM1NAME=NVARDIMNAM(1)
+HDIM2NAME=NVARDIMNAM(2)
+IF (ALLOCATED(ZVALU2D  ))  DEALLOCATE(ZVALU2D)
+IF (LHOOK) CALL DR_HOOK('MODE_READ_NETCDF_MERCATOR:GET2DCDF',1,ZHOOK_HANDLE)
+!
+END SUBROUTINE GET2DCDF
+!-------------------------------------------------------------------
+!-------------------------------------------------------------------
+!     ####################
+      SUBROUTINE GET3DCDF(KCDF_ID,IDVAR,PDIM1,HDIM1NAME,PDIM2,HDIM2NAME,&
+             PDIM3,HDIM3NAME,PMISSVALUE,PVALU3D)  
+!     ####################
+USE MODD_SURF_PAR,         ONLY : XUNDEF
+!
+IMPLICIT NONE
+!
+INTEGER,INTENT(IN) :: KCDF_ID !netcdf file identifiant
+INTEGER,INTENT(IN) :: IDVAR   !variable to read identifiant
+REAL,DIMENSION(:),INTENT(OUT) :: PDIM1,PDIM2,PDIM3 !dimensions for PVALU2D array
+ CHARACTER(len=80),INTENT(OUT) :: HDIM1NAME,HDIM2NAME,HDIM3NAME    !dimensions names
+REAL, INTENT(OUT) :: PMISSVALUE
+REAL,DIMENSION(:,:,:),INTENT(OUT) :: PVALU3D !value array
+!
+integer :: status
+character(len=80) :: HACTION
+integer,save :: NDIMS=3
+integer :: KVARTYPE
+integer,DIMENSION(:),ALLOCATABLE :: NVARDIMID,NVARDIMLEN
+character(len=80),DIMENSION(:),ALLOCATABLE :: NVARDIMNAM
+integer :: JLOOP2, JLOOP
+integer :: J1,J2,J3
+integer :: NGATTS   
+character(len=80),DIMENSION(:),ALLOCATABLE :: HNAME
+real :: ZMISS1,ZMISS2,ZMISS3
+real :: ZSCFA, ZOFFS
+REAL,DIMENSION(:,:,:),ALLOCATABLE :: ZVALU3D !value array
+INTEGER,DIMENSION(:,:,:),ALLOCATABLE :: IVALU3D
+REAL(KIND=JPRB) :: ZHOOK_HANDLE
+!
+include 'netcdf.inc'
+!
+IF (LHOOK) CALL DR_HOOK('MODE_READ_NETCDF_MERCATOR:GET3DCDF',0,ZHOOK_HANDLE)
+PMISSVALUE=-9999.9 
+ALLOCATE(NVARDIMID (NDIMS))
+ALLOCATE(NVARDIMLEN(NDIMS))
+ALLOCATE(NVARDIMNAM(NDIMS))
+NVARDIMID (:)=0
+NVARDIMLEN(:)=0
+NVARDIMNAM(:)=' '
+!
+HACTION='get variable type'
+status=nf_inq_vartype(KCDF_ID,IDVAR,KVARTYPE)
+if (status/=NF_NOERR) CALL HANDLE_ERR_MER(status,HACTION)
+!write(0,*) 'variable type = ',KVARTYPE
+!
+HACTION='get variable dimensions identifiant'
+status=nf_inq_vardimid(KCDF_ID,IDVAR,NVARDIMID)
+if (status/=NF_NOERR) CALL HANDLE_ERR_MER(status,HACTION)
+!write(0,*) 'variable dimension identifiant ',NVARDIMID
+!
+HACTION='get attributs'
+status=nf_inq_varnatts(KCDF_ID,IDVAR,NGATTS)
+if (status/=NF_NOERR) CALL HANDLE_ERR_MER(status,HACTION)
+!write(0,*) 'number of attributes = ',NGATTS
+allocate(hname(1:NGATTS))
+!
+ZSCFA=1.
+ZOFFS=0.
+DO JLOOP=1,NGATTS
+  status=nf_inq_attname(KCDF_ID,IDVAR,JLOOP,hname(JLOOP))
+  if (status/=NF_NOERR) CALL HANDLE_ERR_MER(status,HACTION)
+  !write(0,*) 'attributes names = ', hname(JLOOP)
+  if (TRIM(hname(JLOOP))=='missing_value') then
+    !write(0,*) 'missing value found '
+    HACTION='get missing value'
+    status=nf_get_att_double(KCDF_ID,IDVAR,"missing_value",PMISSVALUE)
+    if (status/=NF_NOERR) CALL HANDLE_ERR_MER(status,HACTION)
+    !write(0,*) 'missing value = ',PMISSVALUE
+  else
+    if (TRIM(hname(JLOOP))=='_FillValue') then
+      !write(0,*) 'missing value found '
+      HACTION='get _FillValue'
+      status=nf_get_att_double(KCDF_ID,IDVAR,"_FillValue",PMISSVALUE)
+      if (status/=NF_NOERR) CALL HANDLE_ERR_MER(status,HACTION)
+      !write(0,*) 'missing value = ',PMISSVALUE
+    endif
+  endif
+  if (TRIM(hname(JLOOP))=='scale_factor') then
+    !write(0,*) 'missing value found '
+    HACTION='get scale factor'
+    status=nf_get_att_double(KCDF_ID,IDVAR,"scale_factor",ZSCFA)
+    if (status/=NF_NOERR) CALL HANDLE_ERR_MER(status,HACTION)
+    !write(0,*) 'missing value = ',PMISSVALUE
+  endif  
+  if (TRIM(hname(JLOOP))=='add_offset') then
+    !write(0,*) 'missing value found '
+    HACTION='get offset'
+    status=nf_get_att_double(KCDF_ID,IDVAR,"add_offset",ZOFFS)
+    if (status/=NF_NOERR) CALL HANDLE_ERR_MER(status,HACTION)
+    !write(0,*) 'missing value = ',PMISSVALUE
+  endif 
+ENDDO
+!
+!
+DO JLOOP2=1,NDIMS
+  HACTION='get variable dimensions name'
+  status=nf_inq_dimname(KCDF_ID,NVARDIMID(JLOOP2),NVARDIMNAM(JLOOP2))
+  if (status/=NF_NOERR) CALL HANDLE_ERR_MER(status,HACTION)
+  HACTION='get variable dimensions length'
+  status=nf_inq_dimlen(KCDF_ID,NVARDIMID(JLOOP2),NVARDIMLEN(JLOOP2))
+  if (status/=NF_NOERR) CALL HANDLE_ERR_MER(status,HACTION)
+  !write(0,*) 'variable dimension ',JLOOP2,' named ',NVARDIMNAM(JLOOP2),&
+  !     &'has a length of',NVARDIMLEN(JLOOP2)
+ENDDO
+! 
+IF (KVARTYPE>=5) then
+  ALLOCATE(ZVALU3D(1:NVARDIMLEN(1),1:NVARDIMLEN(2),1:NVARDIMLEN(3)))
+  ZVALU3D=0.        
+  HACTION='get variable values (3D)'
+  status=nf_get_var_double(KCDF_ID,IDVAR,ZVALU3D(:,:,:))
+  if (status/=NF_NOERR) CALL HANDLE_ERR_MER(status,HACTION)
+ELSE
+  ALLOCATE(IVALU3D(1:NVARDIMLEN(1),1:NVARDIMLEN(2),1:NVARDIMLEN(3)))
+  IVALU3D=0.         
+  HACTION='get variable values (3D)'
+  status=nf_get_var_int(KCDF_ID,IDVAR,IVALU3D(:,:,:))
+  if (status/=NF_NOERR) CALL HANDLE_ERR_MER(status,HACTION)
+ENDIF
+!
+PVALU3D(:,:,:)=XUNDEF
+DO J1=1,NVARDIMLEN(1)
+  DO J2=1,NVARDIMLEN(2)
+    DO J3=1,NVARDIMLEN(3)
+      IF (KVARTYPE>=5) THEN
+        IF (ZVALU3D(J1,J2,J3)/=PMISSVALUE) PVALU3D(J1,J2,J3)=ZVALU3D(J1,J2,J3)*ZSCFA+ZOFFS
+      ELSE
+        IF (IVALU3D(J1,J2,J3)/=PMISSVALUE) PVALU3D(J1,j2,J3)=IVALU3D(J1,J2,J3)*ZSCFA+ZOFFS
+      ENDIF
+    ENDDO
+  ENDDO
+ENDDO
+!
+ CALL GET1DCDF(KCDF_ID,NVARDIMID(1),ZMISS1,PDIM1)
+ CALL GET1DCDF(KCDF_ID,NVARDIMID(2),ZMISS2,PDIM2)
+ CALL GET1DCDF(KCDF_ID,NVARDIMID(3),ZMISS3,PDIM3)
+HDIM1NAME=NVARDIMNAM(1)
+HDIM2NAME=NVARDIMNAM(2)
+HDIM3NAME=NVARDIMNAM(3)
+IF (ALLOCATED(ZVALU3D  ))  DEALLOCATE(ZVALU3D)
+IF (LHOOK) CALL DR_HOOK('MODE_READ_NETCDF_MERCATOR:GET3DCDF',1,ZHOOK_HANDLE)
+!
+END SUBROUTINE GET3DCDF
+!--------------------------------------------------------------------
+!-------------------------------------------------------------------
+!------------------------------------------------------------------------------
+!==============================================================================
+!     ####################
+       SUBROUTINE READ_DIM_CDF(HFILENAME,HNCVARNAME,KDIM)
+!     ####################
+!
+IMPLICIT NONE
+!
+ CHARACTER(LEN=28), INTENT(IN) :: HFILENAME   ! Name of the field file.
+ CHARACTER(LEN=28), INTENT(IN) :: HNCVARNAME  ! Name of variable to read in netcdf file
+INTEGER,           INTENT(OUT):: KDIM        ! value of dimension to get
+!
+integer :: status
+integer :: kcdf_id
+integer :: NBVARS
+character(len=80) :: HACTION
+character(len=80),DIMENSION(:),ALLOCATABLE :: VARNAME
+integer ::JLOOP1,JLOOP
+integer ::ID_VARTOGET,ID_VARTOGET1,ID_VARTOGET2
+integer ::NVARDIMS
+integer,DIMENSION(2) ::NLEN2D
+REAL(KIND=JPRB) :: ZHOOK_HANDLE
+!
+include 'netcdf.inc'
+!
+!*    1.      Open the netcdf file 
+!             --------------------
+IF (LHOOK) CALL DR_HOOK('MODE_READ_NETCDF_MERCATOR:READ_DIM_CDF',0,ZHOOK_HANDLE)
+HACTION='open netcdf'
+status=NF_OPEN(HFILENAME,nf_nowrite,kcdf_id)
+if (status/=NF_NOERR) then 
+  CALL HANDLE_ERR_MER(status,HACTION)
+!else
+!  write(0,*) 'netcdf file opened: ',HFILENAME
+endif
+!
+!-----------
+!
+!*    2.      get the number of variables in netcdf file 
+!             ------------------------------------------
+HACTION='get number of variables'
+status=NF_INQ_NVARS(kcdf_id,NBVARS)
+if (status/=NF_NOERR) CALL HANDLE_ERR_MER(status,HACTION)
+!write(0,*) 'nb vars', NBVARS
+ALLOCATE(VARNAME(NBVARS))
+!
+!-----------
+!
+!*    3.      get the variables names in netcdf file 
+!             --------------------------------------
+ID_VARTOGET1=0
+ID_VARTOGET2=0
+DO JLOOP1=1,NBVARS
+  HACTION='get variables  names'
+  status=NF_INQ_VARNAME(kcdf_id,JLOOP1,VARNAME(JLOOP1))
+  if (status/=NF_NOERR) CALL HANDLE_ERR_MER(status,HACTION)
+  !write(0,*) 'var',JLOOP1,' name: ',VARNAME(JLOOP1)
+  if (VARNAME(JLOOP1)==HNCVARNAME) then
+    !write(0,*) 'var',JLOOP1,' corresponding to variable required'
+    ID_VARTOGET1=JLOOP1
+  endif
+  if (VARNAME(JLOOP1)/=HNCVARNAME) then
+    if((LGT(TRIM(VARNAME(JLOOP1)),TRIM(HNCVARNAME))).AND.&
+           (SCAN(TRIM(VARNAME(JLOOP1)),TRIM(HNCVARNAME))==1)) then  
+      !write(0,*) 'var',JLOOP1,VARNAME(JLOOP1),' could correspond to variable required ?'
+      !write(0,*) HNCVARNAME,' is variable required; only ',VARNAME(JLOOP1),' found'
+      ID_VARTOGET2=JLOOP1
+    endif
+  endif
+ENDDO
+if (ID_VARTOGET1/=0) then
+  ID_VARTOGET=ID_VARTOGET1
+else
+  ID_VARTOGET=ID_VARTOGET2
+endif
+if (ID_VARTOGET==0) then
+  HACTION='close netcdf'
+  status=nf_close(kcdf_id)
+  if (status/=NF_NOERR) CALL HANDLE_ERR_MER(status,HACTION)
+  CALL ABOR1_SFX('MODE_READ_NETCDF_MERCATOR: READ_DIM_CDF')
+endif
+!-----------
+!
+!*    4.      get the total dimension of HNCVARNAME 
+!             -------------------------------------
+!
+!     4.1      get the variable dimensions number
+!             -----------------------------------
+!
+HACTION='get variable dimensions number'
+status=nf_inq_varndims(kcdf_id,ID_VARTOGET,NVARDIMS)
+if (status/=NF_NOERR) CALL HANDLE_ERR_MER(status,HACTION)
+!write(0,*) 'variable dimensions number = ',NVARDIMS
+!
+!     4.2      get the variable dimensions length
+!              ----------------------------------
+SELECT CASE (NVARDIMS)
+!CAS 1D
+  CASE (1) 
+    HACTION='get variable dimensions length'
+    status=nf_inq_dimlen(kcdf_id,ID_VARTOGET,KDIM)
+    if (status/=NF_NOERR) CALL HANDLE_ERR_MER(status,HACTION)
+!
+!CAS 2D
+  CASE (2)
+    KDIM=1
+    DO JLOOP=1,NVARDIMS
+      HACTION='get variable dimensions length'
+      status=nf_inq_dimlen(kcdf_id,ID_VARTOGET,NLEN2D(JLOOP))
+      if (status/=NF_NOERR) CALL HANDLE_ERR_MER(status,HACTION)
+      KDIM=KDIM*NLEN2D(JLOOP)
+    ENDDO
+END SELECT
+!-----------
+!*    10.     Close the netcdf file 
+!             ---------------------
+HACTION='close netcdf'
+status=nf_close(kcdf_id)
+if (status/=NF_NOERR) CALL HANDLE_ERR_MER(status,HACTION)
+!write(0,*) 'OK: netcdf file closed: ',HFILENAME
+!
+!-----------
+!*    11.     Deallocate 
+!             ----------
+IF (ALLOCATED(VARNAME     ))  DEALLOCATE(VARNAME)
+IF (LHOOK) CALL DR_HOOK('MODE_READ_NETCDF_MERCATOR:READ_DIM_CDF',1,ZHOOK_HANDLE)
+!
+END SUBROUTINE READ_DIM_CDF
+!-------------------------------------------------------------------
+!-------------------------------------------------------------------
+!     ####################
+       SUBROUTINE PREP_NETCDF_GRID(HFILENAME,HNCVARNAME)
+!     ####################
+!
+USE MODD_GRID_LATLONREGUL
+USE MODD_SURF_PAR
+!
+IMPLICIT NONE
+!
+ CHARACTER(LEN=28), INTENT(IN) :: HFILENAME   ! Name of the field file.
+ CHARACTER(LEN=28), INTENT(IN) :: HNCVARNAME  ! Name of variable to read in netcdf file
+!
+integer :: status
+integer :: kcdf_id
+integer :: NBVARS
+character(len=80) :: HACTION
+character(len=80),DIMENSION(:),ALLOCATABLE :: VARNAME
+integer,DIMENSION(:),ALLOCATABLE :: NVARDIMID
+integer ::JLOOP1,JLOOP
+integer ::ID_VARTOGET,ID_VARTOGET1,ID_VARTOGET2
+integer ::NVARDIMS
+integer,DIMENSION(3) ::NDIMLEN
+character(LEN=80),DIMENSION(3) :: NDIMNAM
+integer :: IDIM
+integer :: INLON
+real :: ZZLAMISS,ZZLOMISS
+REAL(KIND=JPRB) :: ZHOOK_HANDLE
+!
+include 'netcdf.inc'
+!
+IF (LHOOK) CALL DR_HOOK('MODE_READ_NETCDF_MERCATOR:PREP_NETCDF_GRID',0,ZHOOK_HANDLE)
+NINLAT  =-NUNDEF
+NINDEPTH=-NUNDEF
+NILENGTH=-NUNDEF
+!
+XILAT1=XUNDEF
+XILON1=XUNDEF
+XILAT2=XUNDEF
+XILON2=XUNDEF
+!*    1.      Open the netcdf file 
+!             --------------------
+HACTION='open netcdf'
+status=NF_OPEN(HFILENAME,nf_nowrite,kcdf_id)
+if (status/=NF_NOERR) then 
+  CALL HANDLE_ERR_MER(status,HACTION)
+!else
+!  write(0,*) 'netcdf file opened: ',HFILENAME
+endif
+!
+!-----------
+!
+!*    2.      get the number of variables in netcdf file 
+!             ------------------------------------------
+HACTION='get number of variables'
+status=NF_INQ_NVARS(kcdf_id,NBVARS)
+if (status/=NF_NOERR) CALL HANDLE_ERR_MER(status,HACTION)
+!write(0,*) 'nb vars', NBVARS
+ALLOCATE(VARNAME(NBVARS))
+!
+!-----------
+!
+!*    3.      get the variables names in netcdf file 
+!             --------------------------------------
+ID_VARTOGET1=0
+ID_VARTOGET2=0
+DO JLOOP1=1,NBVARS
+  HACTION='get variables  names'
+  status=NF_INQ_VARNAME(kcdf_id,JLOOP1,VARNAME(JLOOP1))
+  if (status/=NF_NOERR) CALL HANDLE_ERR_MER(status,HACTION)
+  if (VARNAME(JLOOP1)==HNCVARNAME) then
+    ID_VARTOGET1=JLOOP1
+  endif
+  if (VARNAME(JLOOP1)/=HNCVARNAME) then
+    if((LGT(TRIM(VARNAME(JLOOP1)),TRIM(HNCVARNAME))).AND.&
+           (SCAN(TRIM(VARNAME(JLOOP1)),TRIM(HNCVARNAME))==1)) then  
+      !write(0,*) 'var',JLOOP1,VARNAME(JLOOP1),' could correspond to variable required ?'
+      !write(0,*) HNCVARNAME,' is variable required; only ',VARNAME(JLOOP1),' found'
+      ID_VARTOGET2=JLOOP1
+    endif
+  endif
+ENDDO
+if (ID_VARTOGET1/=0) then
+  ID_VARTOGET=ID_VARTOGET1
+else
+  ID_VARTOGET=ID_VARTOGET2
+endif
+if (ID_VARTOGET==0) then
+  HACTION='close netcdf'
+  status=nf_close(kcdf_id)
+  if (status/=NF_NOERR) CALL HANDLE_ERR_MER(status,HACTION)
+  IF (LHOOK) CALL DR_HOOK('MODE_READ_NETCDF_MERCATOR:PREP_NETCDF_GRID',1,ZHOOK_HANDLE)
+  RETURN
+endif
+NILENGTH=0
+!-----------
+!
+!*    4.      get the total dimension of HNCVARNAME 
+!             -------------------------------------
+!
+!     4.1      get the variable dimensions number
+!             -----------------------------------
+!
+HACTION='get variable dimensions number'
+status=nf_inq_varndims(kcdf_id,ID_VARTOGET,NVARDIMS)
+if (status/=NF_NOERR) CALL HANDLE_ERR_MER(status,HACTION)
+!write(0,*) 'variable dimensions number = ',NVARDIMS
+ALLOCATE(NVARDIMID(NVARDIMS))
+HACTION='get variable dimensions identifiant'
+status=nf_inq_vardimid(kcdf_id,ID_VARTOGET,NVARDIMID)
+if (status/=NF_NOERR) CALL HANDLE_ERR_MER(status,HACTION)
+!
+!     4.2      get the variable dimensions length
+!              ----------------------------------
+SELECT CASE (NVARDIMS)
+!CAS 1D
+  CASE (1) 
+    HACTION='get variable dimensions length'
+    status=nf_inq_dimlen(kcdf_id,ID_VARTOGET,IDIM)
+    if (status/=NF_NOERR) CALL HANDLE_ERR_MER(status,HACTION)
+!
+!CAS 2D,3D
+  CASE (2,3)
+    DO JLOOP=1,NVARDIMS
+      HACTION='get variable dimensions length'
+      status=nf_inq_dimlen(kcdf_id,NVARDIMID(JLOOP),NDIMLEN(JLOOP))
+      if (status/=NF_NOERR) CALL HANDLE_ERR_MER(status,HACTION)
+      HACTION='get variable dimensions names'
+      status=nf_inq_dimname(kcdf_id,NVARDIMID(JLOOP),NDIMNAM(JLOOP))
+      if (status/=NF_NOERR) CALL HANDLE_ERR_MER(status,HACTION)
+      if ((NDIMNAM(JLOOP)=='lat').OR.(NDIMNAM(JLOOP)=='latitude')) then
+        NINLAT=NDIMLEN(JLOOP)
+        if (.not.allocated(XILATARRAY)) allocate(XILATARRAY(NDIMLEN(JLOOP)))
+        if (.not.allocated(NINLON)) allocate(NINLON(NINLAT))
+        CALL GET1DCDF(kcdf_id,NVARDIMID(JLOOP),ZZLAMISS,XILATARRAY(:))
+      endif
+      if ((NDIMNAM(JLOOP)=='lon').OR.(NDIMNAM(JLOOP)=='longitude')) then
+        INLON=NDIMLEN(JLOOP)
+        if (.not.allocated(XILONARRAY)) allocate(XILONARRAY(NDIMLEN(JLOOP)))
+        CALL GET1DCDF(kcdf_id,NVARDIMID(JLOOP),ZZLOMISS,XILONARRAY(:))
+      endif
+      if (NDIMNAM(JLOOP)=='depth') NINDEPTH=NDIMLEN(JLOOP)
+    ENDDO
+    NINLON(:)=INLON
+END SELECT
+!-----------
+!*    10.     Close the netcdf file 
+!             ---------------------
+HACTION='close netcdf'
+status=nf_close(kcdf_id)
+if (status/=NF_NOERR) CALL HANDLE_ERR_MER(status,HACTION)
+!write(0,*) 'OK: netcdf file closed: ',HFILENAME
+!
+!-----------
+!GRID PARAM FOR HORIBL_SURF
+DO JLOOP1=1,NINLAT
+  NILENGTH = NILENGTH + NINLON(JLOOP1)
+ENDDO
+XILAT1=XILATARRAY(1)
+XILON1=XILONARRAY(1)
+XILAT2=XILATARRAY(SIZE(XILATARRAY))
+XILON2=XILONARRAY(SIZE(XILONARRAY))
+!
+!*    11.     Deallocate 
+!             ----------
+IF (ALLOCATED(VARNAME     ))  DEALLOCATE(VARNAME)
+IF (LHOOK) CALL DR_HOOK('MODE_READ_NETCDF_MERCATOR:PREP_NETCDF_GRID',1,ZHOOK_HANDLE)
+!
+END SUBROUTINE PREP_NETCDF_GRID
+!------------------------------------------------------------------------------
+!==============================================================================
+!     ####################
+       SUBROUTINE READ_Z1D_CDF(HFILENAME,HNCVARNAME,PVAL)
+!     ####################
+!
+IMPLICIT NONE
+!
+ CHARACTER(LEN=28), INTENT(IN) :: HFILENAME   ! Name of the field file.
+ CHARACTER(LEN=28), INTENT(IN) :: HNCVARNAME  ! Name of variable to read in netcdf file
+REAL, DIMENSION(:), INTENT(OUT) :: PVAL      ! value to get
+!
+integer :: status
+integer :: kcdf_id
+integer :: NBVARS
+character(len=80) :: HACTION
+character(len=80),DIMENSION(:),ALLOCATABLE :: VARNAME
+integer ::JLOOP1
+integer ::ID_VARTOGET,ID_VARTOGET1,ID_VARTOGET2
+integer ::NVARDIMS
+integer ::NLEN
+real,DIMENSION(:),ALLOCATABLE   :: ZVALU
+real :: ZMISS
+REAL(KIND=JPRB) :: ZHOOK_HANDLE
+!
+include 'netcdf.inc'
+!
+!*    1.      Open the netcdf file 
+!             --------------------
+IF (LHOOK) CALL DR_HOOK('MODE_READ_NETCDF_MERCATOR:READ_Z1D_CDF',0,ZHOOK_HANDLE)
+status=-9999
+kcdf_id=-9999
+HACTION='open netcdf'
+status=NF_OPEN(HFILENAME,nf_nowrite,kcdf_id)
+if (status/=NF_NOERR) then 
+  CALL HANDLE_ERR_MER(status,HACTION)
+endif
+!-----------
+!*    2.      get the number of variables in netcdf file 
+!             ------------------------------------------
+HACTION='get number of variables'
+status=NF_INQ_NVARS(kcdf_id,NBVARS)
+if (status/=NF_NOERR) CALL HANDLE_ERR_MER(status,HACTION)
+!write(0,*) 'nb vars', NBVARS
+ALLOCATE(VARNAME(NBVARS))
+!-----------
+!*    3.      get the variables names in netcdf file 
+!             --------------------------------------
+ID_VARTOGET1=0
+ID_VARTOGET2=0
+DO JLOOP1=1,NBVARS
+  HACTION='get variables  names'
+  status=NF_INQ_VARNAME(kcdf_id,JLOOP1,VARNAME(JLOOP1))
+  if (status/=NF_NOERR) CALL HANDLE_ERR_MER(status,HACTION)
+  if (VARNAME(JLOOP1)==HNCVARNAME) then
+    ID_VARTOGET1=JLOOP1
+  endif
+  if (VARNAME(JLOOP1)/=HNCVARNAME) then
+    if((LGT(TRIM(VARNAME(JLOOP1)),TRIM(HNCVARNAME))).AND.&
+           (SCAN(TRIM(VARNAME(JLOOP1)),TRIM(HNCVARNAME))==1)) then  
+      ID_VARTOGET2=JLOOP1
+    endif
+  endif
+ENDDO
+if (ID_VARTOGET1/=0) then
+  ID_VARTOGET=ID_VARTOGET1
+else
+  ID_VARTOGET=ID_VARTOGET2
+endif
+if (ID_VARTOGET==0) then
+  HACTION='close netcdf'
+  status=nf_close(kcdf_id)
+  if (status/=NF_NOERR) CALL HANDLE_ERR_MER(status,HACTION)
+  CALL ABOR1_SFX('MODE_READ_NETCDF_MERCATOR: READ_Z1D_CDF')
+endif
+!-----------
+!*    4.      get the variable in netcdf file 
+!             -------------------------------
+!     4.1      get the variable dimensions number
+!             -----------------------------------
+HACTION='get variable dimensions number'
+status=nf_inq_varndims(kcdf_id,ID_VARTOGET,NVARDIMS)
+if (status/=NF_NOERR) CALL HANDLE_ERR_MER(status,HACTION)
+!
+!     4.2      get the variable dimensions length and values
+!            ----------------------------------------------
+SELECT CASE (NVARDIMS)
+!CAS 1D
+  CASE (1) 
+    HACTION='get variable dimensions length'
+    status=nf_inq_dimlen(kcdf_id,ID_VARTOGET,NLEN)
+    if (status/=NF_NOERR) CALL HANDLE_ERR_MER(status,HACTION)
+    ALLOCATE(ZVALU(NLEN))
+    !write(0,*) 'call GET1DCDF'
+    CALL GET1DCDF(kcdf_id,ID_VARTOGET,ZMISS,ZVALU)
+    PVAL(:)=ZVALU(:)
+!CAS 2D
+  CASE (2)
+    write(0,*) 'YOU ARE TRYING TO READ A 2D FIELD FOR :', TRIM(HNCVARNAME)
+    CALL ABOR1_SFX('MODE_READ_NETCDF_MERCATOR: READ_Z1D_CDF')
+END SELECT
+!-----------
+!*    5.     Close the netcdf file 
+!             ---------------------
+HACTION='close netcdf'
+status=nf_close(kcdf_id)
+if (status/=NF_NOERR) CALL HANDLE_ERR_MER(status,HACTION)
+!-----------
+!*    6.     Deallocate 
+!             ----------
+IF (ALLOCATED(VARNAME     ))  DEALLOCATE(VARNAME)
+IF (ALLOCATED(ZVALU       ))  DEALLOCATE(ZVALU  )
+!!
+IF (LHOOK) CALL DR_HOOK('MODE_READ_NETCDF_MERCATOR:READ_Z1D_CDF',1,ZHOOK_HANDLE)
+END SUBROUTINE READ_Z1D_CDF
+!------------------------------------------------------------------------------
+!==============================================================================
+!     ####################
+       SUBROUTINE READ_LATLONVAL_CDF(HFILENAME,HNCVARNAME,PLON,PLAT,PVAL)
+!     ####################
+!
+IMPLICIT NONE
+!
+ CHARACTER(LEN=28), INTENT(IN) :: HFILENAME   ! Name of the field file.
+ CHARACTER(LEN=28), INTENT(IN) :: HNCVARNAME  ! Name of variable to read in netcdf file
+REAL, DIMENSION(:), INTENT(OUT) :: PLON,PLAT ! Longitudes/latitudes in netcdf file 
+REAL, DIMENSION(:), INTENT(OUT) :: PVAL      ! value to get
+!
+integer :: status
+integer :: kcdf_id
+integer :: NBVARS
+character(len=80) :: HACTION
+character(len=80),DIMENSION(:),ALLOCATABLE :: VARNAME
+integer ::JLOOP1,JDIM1,JDIM2,JLOOP
+integer ::ID_VARTOGET,ID_VARTOGET1,ID_VARTOGET2
+integer ::NVARDIMS
+integer ::NLEN
+integer,DIMENSION(2) ::NLEN2D
+integer,DIMENSION(:),ALLOCATABLE :: NVARDIMID,NVARDIMLEN
+character(len=80),DIMENSION(:),ALLOCATABLE :: NVARDIMNAM
+real,DIMENSION(:),ALLOCATABLE   :: ZVALU
+real,DIMENSION(:,:),ALLOCATABLE :: ZVALU2D
+real :: ZMISS
+real,DIMENSION(:),ALLOCATABLE :: ZDIM1
+real,DIMENSION(:),ALLOCATABLE :: ZDIM2
+character(len=80) :: YDIM1NAME,YDIM2NAME
+integer :: ILONFOUND,ILATFOUND, IARG
+REAL(KIND=JPRB) :: ZHOOK_HANDLE
+!
+include 'netcdf.inc'
+!
+!
+!
+!*    1.      Open the netcdf file 
+!             --------------------
+IF (LHOOK) CALL DR_HOOK('MODE_READ_NETCDF_MERCATOR:READ_LATLONVAL_CDF',0,ZHOOK_HANDLE)
+status=-9999
+kcdf_id=-9999
+HACTION='open netcdf'
+status=NF_OPEN(HFILENAME,nf_nowrite,kcdf_id)
+if (status/=NF_NOERR) then 
+  CALL HANDLE_ERR_MER(status,HACTION)
+!else
+!  write(0,*) 'netcdf file opened: ',HFILENAME
+endif
+!
+!-----------
+!
+!*    2.      get the number of variables in netcdf file 
+!             ------------------------------------------
+HACTION='get number of variables'
+status=NF_INQ_NVARS(kcdf_id,NBVARS)
+if (status/=NF_NOERR) CALL HANDLE_ERR_MER(status,HACTION)
+!write(0,*) 'nb vars', NBVARS
+ALLOCATE(VARNAME(NBVARS))
+!
+!-----------
+!
+!*    3.      get the variables names in netcdf file 
+!             --------------------------------------
+ID_VARTOGET1=0
+ID_VARTOGET2=0
+DO JLOOP1=1,NBVARS
+  HACTION='get variables  names'
+  status=NF_INQ_VARNAME(kcdf_id,JLOOP1,VARNAME(JLOOP1))
+  if (status/=NF_NOERR) CALL HANDLE_ERR_MER(status,HACTION)
+  !write(0,*) 'var',JLOOP1,' name: ',VARNAME(JLOOP1)
+  if (VARNAME(JLOOP1)==HNCVARNAME) then
+    ID_VARTOGET1=JLOOP1
+  endif
+  if (VARNAME(JLOOP1)/=HNCVARNAME) then
+    if((LGT(TRIM(VARNAME(JLOOP1)),TRIM(HNCVARNAME))).AND.&
+           (SCAN(TRIM(VARNAME(JLOOP1)),TRIM(HNCVARNAME))==1)) then  
+      !write(0,*) 'var',JLOOP1,VARNAME(JLOOP1),' could correspond to variable required ?'
+      !write(0,*) HNCVARNAME,' is variable required; only ',VARNAME(JLOOP1),' found'
+      ID_VARTOGET2=JLOOP1
+    endif
+  endif
+ENDDO
+if (ID_VARTOGET1/=0) then
+  ID_VARTOGET=ID_VARTOGET1
+else
+  ID_VARTOGET=ID_VARTOGET2
+endif
+if (ID_VARTOGET==0) then
+  HACTION='close netcdf'
+  status=nf_close(kcdf_id)
+  if (status/=NF_NOERR) CALL HANDLE_ERR_MER(status,HACTION)
+  CALL ABOR1_SFX('MODE_READ_NETCDF_MERCATOR: READ_LATLONVAL_CDF')
+endif
+!-----------
+!
+!*    4.      get the variable in netcdf file 
+!             -------------------------------
+!
+!     4.1      get the variable dimensions number
+!             -----------------------------------
+!
+HACTION='get variable dimensions number'
+status=nf_inq_varndims(kcdf_id,ID_VARTOGET,NVARDIMS)
+if (status/=NF_NOERR) CALL HANDLE_ERR_MER(status,HACTION)
+!write(0,*) 'variable dimensions number = ',NVARDIMS
+!
+!     4.2      get the variable dimensions length and values
+!              ----------------------------------------------
+SELECT CASE (NVARDIMS)
+!CAS 1D
+  CASE (1) 
+    HACTION='get variable dimensions length'
+    status=nf_inq_dimlen(kcdf_id,ID_VARTOGET,NLEN)
+    if (status/=NF_NOERR) CALL HANDLE_ERR_MER(status,HACTION)
+    ALLOCATE(ZVALU(NLEN))
+    CALL GET1DCDF(kcdf_id,ID_VARTOGET,ZMISS,ZVALU)
+    PVAL(:)=ZVALU(:)
+!CAS 2D
+  CASE (2)
+    DO JLOOP=1,NVARDIMS
+      HACTION='get variable dimensions length'
+      status=nf_inq_dimlen(kcdf_id,ID_VARTOGET,NLEN2D(JLOOP))
+      if (status/=NF_NOERR) CALL HANDLE_ERR_MER(status,HACTION)
+    ENDDO
+    ALLOCATE(ZVALU2D(NLEN2D(1),NLEN2D(2)))
+    ALLOCATE(ZDIM1(NLEN2D(1)))
+    ALLOCATE(ZDIM2(NLEN2D(2)))
+    CALL GET2DCDF(kcdf_id,ID_VARTOGET,ZDIM1,YDIM1NAME,ZDIM2,YDIM2NAME,&
+           ZMISS,ZVALU2D)  
+    !write(0,*) 'YDIM1NAME: ',YDIM1NAME
+    !write(0,*) 'YDIM2NAME: ',YDIM2NAME
+    if ((YDIM1NAME=='lon').OR.(YDIM1NAME=='longitude')) ILONFOUND=1
+    if ((YDIM2NAME=='lon').OR.(YDIM2NAME=='longitude')) ILONFOUND=2
+    if ((YDIM1NAME=='lat').OR.(YDIM1NAME=='latitude'))  ILATFOUND=1
+    if ((YDIM2NAME=='lat').OR.(YDIM2NAME=='latitude'))  ILATFOUND=2
+    IARG=0
+!
+!     4.3      complete arrays
+!              ---------------
+    IF ((ILONFOUND==1).AND.(ILATFOUND==2)) then
+      !write(0,*) 'ILONFOUND',ILONFOUND,'ILATFOUND',ILATFOUND
+      DO JDIM1=1,SIZE(ZDIM1)
+        DO JDIM2=1,SIZE(ZDIM2)
+          IARG=IARG+1
+          PVAL(IARG)=ZVALU2D(JDIM1,JDIM2)
+          PLON(IARG)=ZDIM1(JDIM1)
+          PLAT(IARG)=ZDIM2(JDIM2)
+        ENDDO
+      ENDDO
+    ELSEIF ((ILONFOUND==2).AND.(ILATFOUND==1)) then
+      !write(0,*) 'ILONFOUND',ILONFOUND,'ILATFOUND',ILATFOUND
+      DO JDIM1=1,SIZE(ZDIM1)
+        DO JDIM2=1,SIZE(ZDIM2)
+          IARG=IARG+1
+          PVAL(IARG)=ZVALU2D(JDIM1,JDIM2)
+          PLAT(IARG)=ZDIM1(JDIM1)
+          PLON(IARG)=ZDIM2(JDIM2)
+        ENDDO
+      ENDDO
+    ELSE
+      write(0,*) '*****WARNING*****: incompatible dimensions to lat/lon/value arrays'
+    ENDIF
+!
+END SELECT
+!
+!
+!-----------
+!*    10.     Close the netcdf file 
+!             ---------------------
+HACTION='close netcdf'
+status=nf_close(kcdf_id)
+if (status/=NF_NOERR) CALL HANDLE_ERR_MER(status,HACTION)
+!write(0,*) 'OK: netcdf file closed: ',HFILENAME
+!
+!-----------
+!*    11.     Deallocate 
+!             ----------
+IF (ALLOCATED(VARNAME     ))  DEALLOCATE(VARNAME)
+IF (ALLOCATED(ZVALU       ))  DEALLOCATE(ZVALU  )
+IF (ALLOCATED(ZVALU2D     ))  DEALLOCATE(ZVALU2D)
+IF (ALLOCATED(ZDIM1       ))  DEALLOCATE(ZDIM1  )
+IF (ALLOCATED(ZDIM2       ))  DEALLOCATE(ZDIM2  )
+!
+!
+IF (ALLOCATED(NVARDIMID   ))  DEALLOCATE(NVARDIMID )
+IF (ALLOCATED(NVARDIMNAM  ))  DEALLOCATE(NVARDIMNAM)
+IF (ALLOCATED(NVARDIMLEN  ))  DEALLOCATE(NVARDIMLEN)
+IF (LHOOK) CALL DR_HOOK('MODE_READ_NETCDF_MERCATOR:READ_LATLONVAL_CDF',1,ZHOOK_HANDLE)
+END SUBROUTINE READ_LATLONVAL_CDF
+!------------------------------------------------------------------------------
+!==============================================================================
+!     ####################
+       SUBROUTINE READ_LATLONDEPVAL_CDF(HFILENAME,HNCVARNAME,PLON,PLAT,PDEP,PVAL)
+!     ####################
+!
+IMPLICIT NONE
+!
+ CHARACTER(LEN=28), INTENT(IN) :: HFILENAME   ! Name of the field file.
+ CHARACTER(LEN=28), INTENT(IN) :: HNCVARNAME  ! Name of variable to read in netcdf file
+REAL, DIMENSION(:), INTENT(OUT) :: PLON,PLAT ! Longitudes/latitudes in netcdf file 
+REAL, DIMENSION(:), INTENT(OUT) :: PDEP      ! depth in netcdf file
+REAL, DIMENSION(:,:), INTENT(OUT) :: PVAL      ! value to get
+!
+integer :: status
+integer :: kcdf_id
+integer :: NBVARS
+character(len=80) :: HACTION
+character(len=80),DIMENSION(:),ALLOCATABLE :: VARNAME
+integer ::JLOOP1,JDIM1,JDIM2,JDIM3,JLOOP
+!integer ::JLOOP2,JLOOP
+integer ::ID_VARTOGET,ID_VARTOGET1,ID_VARTOGET2
+integer ::NVARDIMS
+integer,DIMENSION(3) ::NLEN3D
+integer,DIMENSION(:),ALLOCATABLE :: NVARDIMID,NVARDIMLEN
+character(len=80),DIMENSION(:),ALLOCATABLE :: NVARDIMNAM
+real,DIMENSION(:,:,:),ALLOCATABLE :: ZVALU3D
+real :: ZMISS
+real,DIMENSION(:),ALLOCATABLE :: ZDIM1
+real,DIMENSION(:),ALLOCATABLE :: ZDIM2
+real,DIMENSION(:),ALLOCATABLE :: ZDIM3
+character(len=80) :: YDIM1NAME,YDIM2NAME,YDIM3NAME
+integer :: ILONFOUND,ILATFOUND,IDEPFOUND
+integer ::  IARG
+REAL(KIND=JPRB) :: ZHOOK_HANDLE
+!
+include 'netcdf.inc'
+!
+!
+!
+!*    1.      Open the netcdf file 
+!             --------------------
+IF (LHOOK) CALL DR_HOOK('MODE_READ_NETCDF_MERCATOR:READ_LATLONDEPVAL_CDF',0,ZHOOK_HANDLE)
+HACTION='open netcdf'
+status=NF_OPEN(HFILENAME,nf_nowrite,kcdf_id)
+if (status/=NF_NOERR) CALL HANDLE_ERR_MER(status,HACTION)
+!write(0,*) 'netcdf file opened: ',HFILENAME
+!
+!-----------
+!
+!*    2.      get the number of variables in netcdf file 
+!             ------------------------------------------
+HACTION='get number of variables'
+status=NF_INQ_NVARS(kcdf_id,NBVARS)
+if (status/=NF_NOERR) CALL HANDLE_ERR_MER(status,HACTION)
+!write(0,*) 'nb vars', NBVARS
+ALLOCATE(VARNAME(NBVARS))
+!
+!-----------
+!
+!*    3.      get the variables names in netcdf file 
+!             --------------------------------------
+ID_VARTOGET1=0
+ID_VARTOGET2=0
+DO JLOOP1=1,NBVARS
+  HACTION='get variables  names'
+  status=NF_INQ_VARNAME(kcdf_id,JLOOP1,VARNAME(JLOOP1))
+  if (status/=NF_NOERR) CALL HANDLE_ERR_MER(status,HACTION)
+  !write(0,*) 'var',JLOOP1,' name: ',VARNAME(JLOOP1)
+  if (VARNAME(JLOOP1)==HNCVARNAME) then
+    !write(0,*) 'var',JLOOP1,' corresponding to variable required'
+    ID_VARTOGET1=JLOOP1
+  endif
+  if (VARNAME(JLOOP1)/=HNCVARNAME) then
+    if((LGT(TRIM(VARNAME(JLOOP1)),TRIM(HNCVARNAME))).AND.&
+           (SCAN(TRIM(VARNAME(JLOOP1)),TRIM(HNCVARNAME))==1)) then  
+      !write(0,*) 'var',JLOOP1,VARNAME(JLOOP1),' could correspond to variable required ?'
+      !write(0,*) HNCVARNAME,' is variable required; only ',VARNAME(JLOOP1),' found'
+      ID_VARTOGET2=JLOOP1
+    endif
+  endif
+ENDDO
+if (ID_VARTOGET1/=0) then
+  ID_VARTOGET=ID_VARTOGET1
+else
+  ID_VARTOGET=ID_VARTOGET2
+endif
+if (ID_VARTOGET==0) then
+  HACTION='close netcdf'
+  status=nf_close(kcdf_id)
+  if (status/=NF_NOERR) CALL HANDLE_ERR_MER(status,HACTION)
+  CALL ABOR1_SFX('MODE_READ_NETCDF_MERCATOR: READ_LATLONDEPVAL_CDF')
+endif
+!-----------
+!
+!*    4.      get the variable in netcdf file 
+!             -------------------------------
+!
+!     4.1      get the variable dimensions number
+!             -----------------------------------
+!
+HACTION='get variable dimensions number'
+status=nf_inq_varndims(kcdf_id,ID_VARTOGET,NVARDIMS)
+if (status/=NF_NOERR) CALL HANDLE_ERR_MER(status,HACTION)
+!write(0,*) 'variable dimensions number = ',NVARDIMS
+ALLOCATE(NVARDIMID(NVARDIMS))
+HACTION='get variable dimensions identifiant'
+status=nf_inq_vardimid(kcdf_id,ID_VARTOGET,NVARDIMID)
+if (status/=NF_NOERR) CALL HANDLE_ERR_MER(status,HACTION)
+!
+!
+!     4.2      get the variable dimensions length and values
+!              ----------------------------------------------
+SELECT CASE (NVARDIMS)
+!CAS 1D, 2D
+  CASE (1,2) 
+    write(0,*) '********************************************'
+    write(0,*) '* number of dimension to low: ',NVARDIMS,' *'
+    write(0,*) '* you need a 3-dimension variable          *'
+    write(0,*) '********************************************'
+!CAS 3D
+  CASE (3)
+    DO JLOOP=1,NVARDIMS
+      HACTION='get variable dimensions length'
+      status=nf_inq_dimlen(kcdf_id,NVARDIMID(JLOOP),NLEN3D(JLOOP))
+      if (status/=NF_NOERR) CALL HANDLE_ERR_MER(status,HACTION)
+    ENDDO
+    ALLOCATE(ZVALU3D(NLEN3D(1),NLEN3D(2),NLEN3D(3)))
+    ALLOCATE(ZDIM1(NLEN3D(1)))
+    ALLOCATE(ZDIM2(NLEN3D(2)))
+    ALLOCATE(ZDIM3(NLEN3D(3)))
+    !write(0,*) 'call GET3DCDF'
+    CALL GET3DCDF(kcdf_id,ID_VARTOGET,ZDIM1,YDIM1NAME,ZDIM2,YDIM2NAME,&
+           ZDIM3,YDIM3NAME,ZMISS,ZVALU3D) 
+    !write(0,*) 'YDIM1NAME: ',YDIM1NAME
+    !write(0,*) 'YDIM2NAME: ',YDIM2NAME
+    !write(0,*) 'YDIM3NAME: ',YDIM3NAME
+    if ((YDIM1NAME=='lon').OR.(YDIM1NAME=='longitude')) ILONFOUND=1
+    if ((YDIM2NAME=='lon').OR.(YDIM2NAME=='longitude')) ILONFOUND=2
+    if ((YDIM3NAME=='lon').OR.(YDIM3NAME=='longitude')) ILONFOUND=3
+    if ((YDIM1NAME=='lat').OR.(YDIM1NAME=='latitude'))  ILATFOUND=1
+    if ((YDIM2NAME=='lat').OR.(YDIM2NAME=='latitude'))  ILATFOUND=2
+    if ((YDIM3NAME=='lat').OR.(YDIM3NAME=='latitude'))  ILATFOUND=3
+    if (YDIM1NAME=='depth')                             IDEPFOUND=1
+    if (YDIM2NAME=='depth')                             IDEPFOUND=2
+    if (YDIM3NAME=='depth')                             IDEPFOUND=3
+    IARG=0
+    !write(0,*) 'ILONFOUND',ILONFOUND,'ILATFOUND',ILATFOUND,'IDEPFOUND',IDEPFOUND
+!!
+!!     4.3      complete arrays
+!!              ---------------
+    IF ((ILONFOUND==1).AND.(ILATFOUND==2).AND.(IDEPFOUND==3)) then
+      !write(0,*) 'SIZE LON=',SIZE(ZDIM1),'SIZE LAT',SIZE(ZDIM2),'SIZE DEP',SIZE(ZDIM3)
+      !write(0,*) 'SIZE PLON=',SIZE(PLON),'SIZE PLAT',SIZE(PLAT),'SIZE PDEP',SIZE(PDEP)
+      PDEP(:)=ZDIM3(:)
+      DO JDIM2=1,SIZE(ZDIM2)
+        DO JDIM1=1,SIZE(ZDIM1)
+          IARG=IARG+1
+          PLON(IARG)=ZDIM1(JDIM1)
+          PLAT(IARG)=ZDIM2(JDIM2)
+          DO JDIM3=1,SIZE(ZDIM3)
+            PVAL(IARG,JDIM3)=ZVALU3D(JDIM1,JDIM2,JDIM3)
+          ENDDO
+        ENDDO
+      ENDDO
+      !write(0,*) 'END complete arrays'
+!
+    ELSEIF ((ILONFOUND==2).AND.(ILATFOUND==1).AND.(IDEPFOUND==3)) then
+      PDEP(:)=ZDIM3(:)
+      DO JDIM1=1,SIZE(ZDIM1)
+        DO JDIM2=1,SIZE(ZDIM2)
+          IARG=IARG+1
+          PLON(IARG)=ZDIM2(JDIM2)
+          PLAT(IARG)=ZDIM1(JDIM1)
+          DO JDIM3=1,SIZE(ZDIM3)
+            PVAL(IARG,JDIM3)=ZVALU3D(JDIM1,JDIM2,JDIM3)
+          ENDDO
+        ENDDO
+      ENDDO
+!
+    ELSEIF ((ILONFOUND==1).AND.(ILATFOUND==3).AND.(IDEPFOUND==2)) then
+      PDEP(:)=ZDIM2(:)
+      DO JDIM3=1,SIZE(ZDIM3)
+        DO JDIM1=1,SIZE(ZDIM1)
+          IARG=IARG+1
+          PLON(IARG)=ZDIM1(JDIM1)
+          PLAT(IARG)=ZDIM3(JDIM3)
+          DO JDIM2=1,SIZE(ZDIM2)
+            PVAL(IARG,JDIM2)=ZVALU3D(JDIM1,JDIM2,JDIM3)
+          ENDDO
+        ENDDO
+      ENDDO
+!
+    ELSEIF ((ILATFOUND==1).AND.(ILONFOUND==3).AND.(IDEPFOUND==2)) then
+      PDEP(:)=ZDIM2(:)
+      DO JDIM1=1,SIZE(ZDIM1)
+        DO JDIM3=1,SIZE(ZDIM3)
+          IARG=IARG+1
+          PLON(IARG)=ZDIM3(JDIM3)
+          PLAT(IARG)=ZDIM1(JDIM1)
+          DO JDIM2=1,SIZE(ZDIM2)
+            PVAL(IARG,JDIM2)=ZVALU3D(JDIM1,JDIM2,JDIM3)
+          ENDDO
+        ENDDO
+      ENDDO
+!
+    ELSEIF ((ILONFOUND==2).AND.(ILATFOUND==3).AND.(IDEPFOUND==1)) then
+      PDEP(:)=ZDIM1(:)
+      DO JDIM3=1,SIZE(ZDIM3)
+        DO JDIM2=1,SIZE(ZDIM2)
+          IARG=IARG+1
+          PLON(IARG)=ZDIM2(JDIM2)
+          PLAT(IARG)=ZDIM3(JDIM3)
+          DO JDIM1=1,SIZE(ZDIM1)
+            PVAL(IARG,JDIM1)=ZVALU3D(JDIM1,JDIM2,JDIM3)
+          ENDDO
+        ENDDO
+      ENDDO
+!
+    ELSEIF ((ILATFOUND==2).AND.(ILONFOUND==3).AND.(IDEPFOUND==1)) then
+      PDEP(:)=ZDIM1(:)
+      DO JDIM2=1,SIZE(ZDIM2)
+        DO JDIM3=1,SIZE(ZDIM3)
+          IARG=IARG+1
+          PLON(IARG)=ZDIM3(JDIM3)
+          PLAT(IARG)=ZDIM2(JDIM2)
+          DO JDIM1=1,SIZE(ZDIM1)
+            PVAL(IARG,JDIM1)=ZVALU3D(JDIM1,JDIM2,JDIM3)
+          ENDDO
+        ENDDO
+      ENDDO
+!
+    ELSE
+      write(0,*) '*****WARNING*****: incompatible dimensions to lat/lon/value arrays'
+    ENDIF
+!
+END SELECT
+!
+!-----------
+!*    10.     Close the netcdf file 
+!             ---------------------
+HACTION='close netcdf'
+!write(0,*) HACTION
+status=nf_close(kcdf_id)
+if (status/=NF_NOERR) CALL HANDLE_ERR_MER(status,HACTION)
+!write(0,*) 'OK: netcdf file closed: ',HFILENAME
+!
+!-----------
+!*    11.     Deallocate 
+!             ----------
+IF (ALLOCATED(VARNAME     ))  DEALLOCATE(VARNAME)
+IF (ALLOCATED(ZVALU3D     ))  DEALLOCATE(ZVALU3D)
+IF (ALLOCATED(ZDIM1       ))  DEALLOCATE(ZDIM1  )
+IF (ALLOCATED(ZDIM2       ))  DEALLOCATE(ZDIM2  )
+IF (ALLOCATED(ZDIM3       ))  DEALLOCATE(ZDIM3  )
+!
+!
+IF (ALLOCATED(NVARDIMID   ))  DEALLOCATE(NVARDIMID )
+IF (ALLOCATED(NVARDIMNAM  ))  DEALLOCATE(NVARDIMNAM)
+IF (ALLOCATED(NVARDIMLEN  ))  DEALLOCATE(NVARDIMLEN)
+201   FORMAT(4(3X,F10.4))
+IF (LHOOK) CALL DR_HOOK('MODE_READ_NETCDF_MERCATOR:READ_LATLONDEPVAL_CDF',1,ZHOOK_HANDLE)
+END SUBROUTINE READ_LATLONDEPVAL_CDF
+!------------------------------------------------------------------------------
+!==============================================================================
+!     ####################
+       SUBROUTINE READ_NETCDF_SST(HFILENAME,HNCVARNAME,PFIELD)
+!     ####################
+!
+USE MODD_GRID_LATLONREGUL, ONLY : NINDEPTH,NILENGTH
+USE MODD_SURF_PAR,         ONLY : XUNDEF
+USE MODD_CSTS,             ONLY : XTT
+USE MODD_PREP,       ONLY : CINTERP_TYPE
+!
+IMPLICIT NONE
+!
+ CHARACTER(LEN=28), INTENT(IN) :: HFILENAME   ! Name of the field file.
+ CHARACTER(LEN=28), INTENT(IN) :: HNCVARNAME  ! Name of variable to read in netcdf file
+REAL, POINTER,DIMENSION(:) :: PFIELD      ! value to get
+!
+REAL,DIMENSION(:), ALLOCATABLE :: ZLATI
+REAL,DIMENSION(:), ALLOCATABLE :: ZLONG
+REAL,TARGET,DIMENSION(:,:), ALLOCATABLE :: ZVALUE
+REAL,DIMENSION(:), ALLOCATABLE :: ZDEPTH
+REAL,TARGET,DIMENSION(:), ALLOCATABLE :: ZVAL
+integer :: jloop
+!PLM
+REAL :: ZUNDEF=999.
+REAL(KIND=JPRB) :: ZHOOK_HANDLE
+!
+!
+include 'netcdf.inc'
+!
+IF (LHOOK) CALL DR_HOOK('MODE_READ_NETCDF_MERCATOR:READ_NETCDF_SST',0,ZHOOK_HANDLE)
+IF (NILENGTH<0) then
+  ALLOCATE(PFIELD(1))
+  PFIELD(:)=XUNDEF
+  CINTERP_TYPE='UNIF  ' !!prescribed uniform field
+ELSEIF (NINDEPTH<0) THEN
+  ALLOCATE(ZLATI(NILENGTH) )
+  ALLOCATE(ZLONG(NILENGTH) )
+  ALLOCATE(ZVAL (NILENGTH) )
+  CALL READ_LATLONVAL_CDF(HFILENAME,HNCVARNAME,ZLONG,ZLATI,ZVAL)
+  ALLOCATE(PFIELD(NILENGTH))
+  PFIELD(:)=XUNDEF
+  PFIELD(:) = ZVAL(:)
+  IF (TRIM(HNCVARNAME) == 'temperature') THEN 
+     WHERE (ZVAL(:)/=ZUNDEF .AND. ZVAL(:)<100.) PFIELD(:)=PFIELD(:)+XTT
+  ENDIF
+  CINTERP_TYPE='HORIBL' !!interpolation from gaussian, legendre or regular grid
+!                       !!CINGRID_TYPE='GAUSS  ' ou ='AROME '
+!                       !!CINGRID_TYPE='LATLON '
+ELSE
+  ALLOCATE(ZVALUE(NILENGTH,NINDEPTH))
+  ALLOCATE(ZLATI(NILENGTH) )
+  ALLOCATE(ZLONG(NILENGTH) )
+  ALLOCATE(ZDEPTH(NINDEPTH))
+!
+ CALL READ_LATLONDEPVAL_CDF(HFILENAME,HNCVARNAME,ZLONG,ZLATI,ZDEPTH,ZVALUE)
+!
+  ALLOCATE(PFIELD(NILENGTH))
+  PFIELD(:)=XUNDEF
+  PFIELD(:)=ZVALUE(:,1)
+  IF (TRIM(HNCVARNAME) == 'temperature') THEN 
+     WHERE (ZVALUE(:,1)/=ZUNDEF .AND. ZVALUE(:,1)<100.) PFIELD(:)=PFIELD(:)+XTT
+  ENDIF
+  CINTERP_TYPE='HORIBL' !!interpolation from gaussian, legendre or regular grid
+!                       !!CINGRID_TYPE='GAUSS  ' ou ='AROME '
+!                       !!CINGRID_TYPE='LATLON '
+ENDIF
+!
+IF (ALLOCATED(ZVALUE      ))  DEALLOCATE(ZVALUE )
+IF (ALLOCATED(ZLONG       ))  DEALLOCATE(ZLONG  )
+IF (ALLOCATED(ZLATI       ))  DEALLOCATE(ZLATI  )
+IF (ALLOCATED(ZDEPTH      ))  DEALLOCATE(ZDEPTH )
+IF (ALLOCATED(ZVAL        ))  DEALLOCATE(ZVAL   )
+!
+202   FORMAT(3(3X,F10.4))
+IF (LHOOK) CALL DR_HOOK('MODE_READ_NETCDF_MERCATOR:READ_NETCDF_SST',1,ZHOOK_HANDLE)
+!
+END SUBROUTINE READ_NETCDF_SST
+!------------------------------------------------------------------------------
+!==============================================================================
+!     ####################
+       SUBROUTINE READ_NETCDF_ZS_SEA(HFILENAME,HNCVARNAME,PFIELD)
+!     ####################
+!
+USE MODD_GRID_LATLONREGUL, ONLY : NINLAT,NINLON,NINDEPTH,NILENGTH
+USE MODD_PREP,       ONLY : CINTERP_TYPE
+!
+IMPLICIT NONE
+!
+ CHARACTER(LEN=28), INTENT(IN) :: HFILENAME   ! Name of the field file.
+ CHARACTER(LEN=28), INTENT(IN) :: HNCVARNAME  ! Name of variable to read in netcdf file
+REAL, POINTER, DIMENSION(:)   :: PFIELD      ! value to get
+!
+REAL,DIMENSION(:), ALLOCATABLE :: ZLATI
+REAL,DIMENSION(:), ALLOCATABLE :: ZLONG
+REAL,TARGET, DIMENSION(:), ALLOCATABLE:: ZVALUE
+integer :: jloop
+REAL(KIND=JPRB) :: ZHOOK_HANDLE
+!
+!
+include 'netcdf.inc'
+!
+IF (LHOOK) CALL DR_HOOK('MODE_READ_NETCDF_MERCATOR:READ_NETCDF_ZS_SEA',0,ZHOOK_HANDLE)
+if(NINDEPTH>0) then
+  !write(0,*) '*****warning*****',HNCVARNAME,' is a 3D field'
+  ALLOCATE(PFIELD(1))
+  PFIELD(:)=0.
+  CINTERP_TYPE='UNIF  ' !!prescribed uniform field
+elseif(NILENGTH>0) then 
+  ALLOCATE(ZVALUE(NILENGTH))
+  ALLOCATE(ZLATI(NILENGTH) )
+  ALLOCATE(ZLONG(NILENGTH) )
+!
+  CALL READ_LATLONVAL_CDF(HFILENAME,HNCVARNAME,ZLONG,ZLATI,ZVALUE)
+  ALLOCATE(PFIELD(NILENGTH))
+  PFIELD(:)=ZVALUE(:)
+  CINTERP_TYPE='HORIBL' !!interpolation from gaussian, legendre or regular grid
+!                       !!CINGRID_TYPE='GAUSS  ' ou ='AROME '
+!                       !!CINGRID_TYPE='LATLON '
+else
+  ALLOCATE(PFIELD(1))
+  PFIELD(:)=0.
+  CINTERP_TYPE='UNIF  ' !!prescribed uniform field
+endif
+!
+IF (ALLOCATED(ZVALUE      ))  DEALLOCATE(ZVALUE )
+IF (ALLOCATED(ZLONG       ))  DEALLOCATE(ZLONG  )
+IF (ALLOCATED(ZLATI       ))  DEALLOCATE(ZLATI  )
+!
+202   FORMAT(3(3X,F10.4))
+IF (LHOOK) CALL DR_HOOK('MODE_READ_NETCDF_MERCATOR:READ_NETCDF_ZS_SEA',1,ZHOOK_HANDLE)
+!
+END SUBROUTINE READ_NETCDF_ZS_SEA
+!------------------------------------------------------------------------------
+!==============================================================================
+!     ####################
+       SUBROUTINE READ_NETCDF_WAVE(HFILENAME,HNCVARNAME,PFIELD)
+!     ####################
+!
+USE MODD_GRID_LATLONREGUL, ONLY : NINLAT,NINLON,NINDEPTH,NILENGTH
+USE MODD_PREP,       ONLY : CINTERP_TYPE
+!
+IMPLICIT NONE
+!
+ CHARACTER(LEN=28), INTENT(IN) :: HFILENAME   ! Name of the field file.
+ CHARACTER(LEN=28), INTENT(IN) :: HNCVARNAME  ! Name of variable to read in netcdf file
+REAL, POINTER, DIMENSION(:)   :: PFIELD      ! value to get
+!
+REAL,DIMENSION(:), ALLOCATABLE :: ZLATI
+REAL,DIMENSION(:), ALLOCATABLE :: ZLONG
+REAL,TARGET, DIMENSION(:), ALLOCATABLE:: ZVALUE
+REAL(KIND=JPRB) :: ZHOOK_HANDLE
+!
+!
+include 'netcdf.inc'
+!
+IF (LHOOK) CALL DR_HOOK('MODE_READ_NETCDF_MERCATOR:READ_NETCDF_WAVE',0,ZHOOK_HANDLE)
+if(NINDEPTH>0) then
+  !write(0,*) '*****warning*****',HNCVARNAME,' is a 3D field'
+  ALLOCATE(PFIELD(1))
+  PFIELD(:)=0.
+  CINTERP_TYPE='UNIF  ' !!prescribed uniform field
+elseif(NILENGTH>0) then
+  ALLOCATE(ZVALUE(NILENGTH))
+  ALLOCATE(ZLATI(NILENGTH) )
+  ALLOCATE(ZLONG(NILENGTH) )
+!
+  CALL READ_LATLONVAL_CDF(HFILENAME,HNCVARNAME,ZLONG,ZLATI,ZVALUE)
+  ALLOCATE(PFIELD(NILENGTH))
+  PFIELD(:)=ZVALUE(:)
+  CINTERP_TYPE='HORIBL' !!interpolation from gaussian, legendre or regular grid
+!                       !!CINGRID_TYPE='GAUSS  ' ou ='AROME '
+!                       !!CINGRID_TYPE='LATLON '
+else
+  ALLOCATE(PFIELD(1))
+  PFIELD(:)=0.
+  CINTERP_TYPE='UNIF  ' !!prescribed uniform field
+endif
+!
+IF (ALLOCATED(ZVALUE      ))  DEALLOCATE(ZVALUE )
+IF (ALLOCATED(ZLONG       ))  DEALLOCATE(ZLONG  )
+IF (ALLOCATED(ZLATI       ))  DEALLOCATE(ZLATI  )
+!
+IF (LHOOK) CALL DR_HOOK('MODE_READ_NETCDF_MERCATOR:READ_NETCDF_WAVE',1,ZHOOK_HANDLE)
+!
+END SUBROUTINE READ_NETCDF_WAVE
+!
+!------------------------------------------------------------------------------
+!==============================================================================
+END MODULE MODE_READ_NETCDF_MERCATOR
diff --git a/src/ARCH_SRC/CPL_WAVE/SURFEX/modn_prep_seaflux.F90 b/src/ARCH_SRC/CPL_WAVE/SURFEX/modn_prep_seaflux.F90
new file mode 100644
index 0000000000000000000000000000000000000000..558eb3b5e24ddb903c3baa3e8a0321ad77ada205
--- /dev/null
+++ b/src/ARCH_SRC/CPL_WAVE/SURFEX/modn_prep_seaflux.F90
@@ -0,0 +1,72 @@
+!SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence
+!SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!SFX_LIC for details. version 1.
+
+!     ##################
+      MODULE MODN_PREP_SEAFLUX
+!     ##################
+!
+!!****  *MODN_PREP_SEAFLUX* - declaration of namelist NAM_PREP_SEAFLUX
+!!
+!!    PURPOSE
+!!    -------
+!       The purpose of this module is to specify  the namelist NAM_PREP_SEAFLUX
+!
+!!
+!!**  IMPLICIT ARGUMENTS
+!!    ------------------
+!!
+!!    REFERENCE
+!!    ---------
+!!
+!!       
+!!    AUTHOR
+!!    ------
+!!      S.Malardel    *Meteo France*
+!!
+!!    MODIFICATIONS
+!!    -------------
+!!      Original    10/2003                    
+!!      Modified    07/2012, P. Le Moigne : CMO1D phasing
+!!                  07/2013, S. Senesi    : handle seaice scheme
+!!                              and uniform sea surface salinity and ice cover
+!!      Modified    03/2014 : M.N. Bouin  ! possibility of wave parameters
+!!                                        ! from external source
+!-------------------------------------------------------------------------------
+!
+!*       0.   DECLARATIONS
+!             ------------
+!
+USE MODD_PREP_SEAFLUX, ONLY : CFILE_SEAFLX, CTYPE_SEAFLX, CFILEPGD_SEAFLX, CTYPEPGD, &
+                              XSST_UNIF, XSSS_UNIF, XSIC_UNIF, &
+			CFILEWAVE_SEAFLX, CTYPEWAVE
+!
+IMPLICIT NONE
+!
+INTEGER           :: NYEAR            ! YEAR for surface
+INTEGER           :: NMONTH           ! MONTH for surface
+INTEGER           :: NDAY             ! DAY for surface
+REAL              :: XTIME            ! TIME for surface
+LOGICAL           :: LSEA_SBL         ! flag to use air layers inside the SBL
+CHARACTER(LEN=6)  :: CSEAICE_SCHEME    ! name of the seaice scheme
+LOGICAL           :: LOCEAN_MERCATOR  ! oceanic variables initialized from 
+                                      !   MERCATOR if true
+LOGICAL           :: LOCEAN_CURRENT   ! initial ocean state with current 
+                                      !   (if false ucur=0, vcur=0)
+REAL              :: XTIME_REL        ! relaxation time (s)
+LOGICAL           :: LCUR_REL         ! If T, relax on current
+LOGICAL           :: LTS_REL          ! If T, relax on T, S
+LOGICAL           :: LZERO_FLUX       ! If T, relax on T, S
+LOGICAL           :: LCORR_FLUX       ! If T, fluxes correction is made
+REAL              :: XCORFLX          ! correction coefficient ( W.m-2.K-1)
+LOGICAL           :: LDIAPYC          ! If T, fluxes correction is made                                      
+!
+NAMELIST/NAM_PREP_SEAFLUX/CFILE_SEAFLX, CTYPE_SEAFLX, CFILEPGD_SEAFLX, CTYPEPGD, XSST_UNIF,  &
+                          CFILEWAVE_SEAFLX, CTYPEWAVE, &
+                          XSSS_UNIF, XSIC_UNIF, NYEAR, NMONTH, NDAY, XTIME, LSEA_SBL, &
+                          CSEAICE_SCHEME, LOCEAN_MERCATOR, LOCEAN_CURRENT,              & 
+                          XTIME_REL,LCUR_REL,LTS_REL,                                  &
+                          LZERO_FLUX,XCORFLX,LCORR_FLUX, LDIAPYC  
+!
+END MODULE MODN_PREP_SEAFLUX
diff --git a/src/ARCH_SRC/CPL_WAVE/SURFEX/modn_seafluxn.F90 b/src/ARCH_SRC/CPL_WAVE/SURFEX/modn_seafluxn.F90
new file mode 100644
index 0000000000000000000000000000000000000000..a51c4509422b7af11f6afe026c7cca8b9f754cde
--- /dev/null
+++ b/src/ARCH_SRC/CPL_WAVE/SURFEX/modn_seafluxn.F90
@@ -0,0 +1,323 @@
+!SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence
+!SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!SFX_LIC for details. version 1.
+!     ##################
+      MODULE MODN_SEAFLUX_n
+!     ##################
+!
+!!****  *MODN_SEAFLUX_n* - declaration of namelist NAM_SEAFLUXn
+!!
+!!    PURPOSE
+!!    -------
+!       The purpose of this module is to specify  the namelist NAM_SEAFLUX_n
+!
+!!
+!!**  IMPLICIT ARGUMENTS
+!!    ------------------
+!!
+!!    REFERENCE
+!!    ---------
+!!
+!!       
+!!    AUTHOR
+!!    ------
+!!      V. Masson    *Meteo France*
+!!
+!!    MODIFICATIONS
+!!    -------------
+!!      Original    01/2004                    
+!!      Modified    01/2006 : sea flux parameterization.
+!!      Modified    08/2009 : LSURF_BUDGETC
+!!      Modified    01/2014 : S. Senesi : introduce sea-ice model
+!!      Modified    03/2014 : S. Belamari - add NZ0 (to choose PZ0SEA formulation)
+!!      Modified    03/2014 : M.N. Bouin  ! possibility of wave parameters
+!!                                        ! from external source
+!-------------------------------------------------------------------------------
+!
+!*       0.   DECLARATIONS
+!             ------------
+!
+
+!
+!
+USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
+USE PARKIND1  ,ONLY : JPRB
+!
+IMPLICIT NONE
+!
+ CHARACTER(LEN=6)  :: CSEA_FLUX
+ CHARACTER(LEN=4)  :: CSEA_ALB
+REAL     :: XTSTEP
+REAL     :: XOUT_TSTEP
+REAL     :: XDIAG_TSTEP
+INTEGER  :: N2M
+LOGICAL  :: L2M_MIN_ZS         
+LOGICAL  :: LSURF_BUDGET
+LOGICAL  :: LRAD_BUDGET
+LOGICAL  :: LSURF_BUDGETC
+LOGICAL  :: LRESET_BUDGETC
+LOGICAL  :: LCOEF
+LOGICAL  :: LSURF_VARS
+LOGICAL  :: LPWG
+LOGICAL  :: LPRECIP
+LOGICAL  :: LPWEBB
+LOGICAL  :: LDIAG_OCEAN
+LOGICAL  :: LWAVEWIND
+LOGICAL  :: LDIAG_SEAICE
+INTEGER  :: NZ0
+INTEGER  :: NGRVWAVES
+REAL     :: XICHCE
+ CHARACTER(LEN=6)  :: CCH_DRY_DEP
+LOGICAL  :: LPROGSST
+LOGICAL  :: LPERTFLUX              ! True = stochastic flux perturbation (default:False)
+INTEGER  :: NTIME_COUPLING
+REAL :: XOCEAN_TSTEP
+ CHARACTER(LEN=6)  :: CINTERPOL_SST
+ CHARACTER(LEN=6)  :: CINTERPOL_SSS
+ CHARACTER(LEN=6)  :: CINTERPOL_SIC
+ CHARACTER(LEN=6)  :: CINTERPOL_SIT
+REAL     :: XFREEZING_SST
+REAL     :: XSIC_EFOLDING_TIME
+REAL     :: XSIT_EFOLDING_TIME
+REAL     :: XSEAICE_TSTEP
+REAL     :: XCD_ICE_CST
+REAL     :: XSI_FLX_DRV
+!
+NAMELIST/NAM_SEAFLUXn/CSEA_FLUX,CSEA_ALB, LPWG, LPRECIP, LPWEBB, NGRVWAVES, &
+                      NZ0, LPROGSST, NTIME_COUPLING, XOCEAN_TSTEP, XICHCE, &
+                      CINTERPOL_SST, CINTERPOL_SSS, LPERTFLUX, &
+                        LWAVEWIND  
+NAMELIST/NAM_DIAG_SURFn/N2M,L2M_MIN_ZS,LSURF_BUDGET,LRAD_BUDGET, &
+                          LSURF_BUDGETC,LRESET_BUDGETC,LCOEF,LSURF_VARS  
+NAMELIST/NAM_CH_SEAFLUXn/CCH_DRY_DEP
+NAMELIST/NAM_DIAG_OCEANn/LDIAG_OCEAN
+NAMELIST/NAM_SEAICEn/LDIAG_SEAICE, CINTERPOL_SIC, CINTERPOL_SIT,           &
+                     XFREEZING_SST, XSIC_EFOLDING_TIME, XSIT_EFOLDING_TIME,&
+                     XSEAICE_TSTEP, XCD_ICE_CST, XSI_FLX_DRV
+!
+CONTAINS
+!
+SUBROUTINE INIT_NAM_SEAFLUXn (O, S)
+!
+  USE MODD_OCEAN_n, ONLY : OCEAN_t
+  USE MODD_SEAFLUX_n, ONLY : SEAFLUX_t
+!
+  IMPLICIT NONE
+
+!
+  TYPE(OCEAN_t), INTENT(INOUT) :: O
+  TYPE(SEAFLUX_t), INTENT(INOUT) :: S
+  REAL(KIND=JPRB) :: ZHOOK_HANDLE
+
+  IF (LHOOK) CALL DR_HOOK('MODN_SEAFLUX_N:INIT_NAM_SEAFLUXN',0,ZHOOK_HANDLE)
+  XTSTEP = S%XTSTEP
+  XOUT_TSTEP = S%XOUT_TSTEP
+  CSEA_FLUX = S%CSEA_FLUX
+  CSEA_ALB = S%CSEA_ALB
+  LPWG = S%LPWG
+  LPRECIP = S%LPRECIP
+  CINTERPOL_SST = S%CINTERPOL_SST
+  CINTERPOL_SSS = S%CINTERPOL_SSS
+  LPWEBB = S%LPWEBB
+  NZ0 = S%NZ0
+  NGRVWAVES = S%NGRVWAVES
+  LWAVEWIND = S%LWAVEWIND
+  LPROGSST = O%LPROGSST
+  NTIME_COUPLING = O%NTIME_COUPLING
+  XOCEAN_TSTEP = O%XOCEAN_TSTEP
+  XICHCE = S%XICHCE
+  LPERTFLUX = S%LPERTFLUX
+IF (LHOOK) CALL DR_HOOK('MODN_SEAFLUX_N:INIT_NAM_SEAFLUXN',1,ZHOOK_HANDLE)
+END SUBROUTINE INIT_NAM_SEAFLUXn
+
+SUBROUTINE UPDATE_NAM_SEAFLUXn (O, S)
+!
+  USE MODD_OCEAN_n, ONLY : OCEAN_t
+  USE MODD_SEAFLUX_n, ONLY : SEAFLUX_t
+!
+  IMPLICIT NONE
+
+!
+  TYPE(OCEAN_t), INTENT(INOUT) :: O
+  TYPE(SEAFLUX_t), INTENT(INOUT) :: S
+  REAL(KIND=JPRB) :: ZHOOK_HANDLE
+
+  IF (LHOOK) CALL DR_HOOK('MODN_SEAFLUX_N:UPDATE_NAM_SEAFLUXN',0,ZHOOK_HANDLE)
+  S%XTSTEP = XTSTEP
+  S%XOUT_TSTEP = XOUT_TSTEP  
+  S%CSEA_FLUX = CSEA_FLUX
+  S%CSEA_ALB = CSEA_ALB
+  S%LPWG = LPWG
+  S%LPRECIP = LPRECIP
+  S%CINTERPOL_SST = CINTERPOL_SST
+  S%CINTERPOL_SSS = CINTERPOL_SSS
+  S%LPWEBB = LPWEBB
+  S%NZ0 = NZ0
+  S%NGRVWAVES = NGRVWAVES
+  S%LWAVEWIND = LWAVEWIND
+  O%LPROGSST = LPROGSST
+  O%NTIME_COUPLING = NTIME_COUPLING
+  O%XOCEAN_TSTEP = XOCEAN_TSTEP
+  S%XICHCE = XICHCE
+  S%LPERTFLUX = LPERTFLUX
+IF (LHOOK) CALL DR_HOOK('MODN_SEAFLUX_N:UPDATE_NAM_SEAFLUXN',1,ZHOOK_HANDLE)
+END SUBROUTINE UPDATE_NAM_SEAFLUXn
+!
+SUBROUTINE INIT_NAM_DIAG_SURFn (DGS)
+!
+  USE MODD_DIAG_SEAFLUX_n, ONLY : DIAG_SEAFLUX_t
+!
+  IMPLICIT NONE
+
+!
+  TYPE(DIAG_SEAFLUX_t), INTENT(INOUT) :: DGS
+  REAL(KIND=JPRB) :: ZHOOK_HANDLE
+
+  IF (LHOOK) CALL DR_HOOK('MODN_SEAFLUX_N:INIT_NAM_DIAG_SURFN',0,ZHOOK_HANDLE)
+  XDIAG_TSTEP = DGS%XDIAG_TSTEP  
+  N2M = DGS%N2M
+  L2M_MIN_ZS = DGS%L2M_MIN_ZS
+  LSURF_BUDGET = DGS%LSURF_BUDGET
+  LRAD_BUDGET = DGS%LRAD_BUDGET
+  LSURF_BUDGETC = DGS%LSURF_BUDGETC
+  LRESET_BUDGETC = DGS%LRESET_BUDGETC  
+  LCOEF = DGS%LCOEF
+  LSURF_VARS = DGS%LSURF_VARS
+IF (LHOOK) CALL DR_HOOK('MODN_SEAFLUX_N:INIT_NAM_DIAG_SURFN',1,ZHOOK_HANDLE)
+END SUBROUTINE INIT_NAM_DIAG_SURFn
+
+SUBROUTINE UPDATE_NAM_DIAG_SURFn (DGS)
+!
+  USE MODD_DIAG_SEAFLUX_n, ONLY : DIAG_SEAFLUX_t
+!
+  IMPLICIT NONE
+
+!
+  TYPE(DIAG_SEAFLUX_t), INTENT(INOUT) :: DGS
+  REAL(KIND=JPRB) :: ZHOOK_HANDLE
+
+  IF (LHOOK) CALL DR_HOOK('MODN_SEAFLUX_N:UPDATE_NAM_DIAG_SURFN',0,ZHOOK_HANDLE)
+  DGS%XDIAG_TSTEP = XDIAG_TSTEP  
+  DGS%N2M = N2M
+  DGS%L2M_MIN_ZS = L2M_MIN_ZS
+  DGS%LSURF_BUDGET = LSURF_BUDGET
+  DGS%LRAD_BUDGET = LRAD_BUDGET 
+  DGS%LSURF_BUDGETC = LSURF_BUDGETC
+  DGS%LRESET_BUDGETC = LRESET_BUDGETC  
+  DGS%LCOEF = LCOEF
+  DGS%LSURF_VARS = LSURF_VARS
+IF (LHOOK) CALL DR_HOOK('MODN_SEAFLUX_N:UPDATE_NAM_DIAG_SURFN',1,ZHOOK_HANDLE)
+END SUBROUTINE UPDATE_NAM_DIAG_SURFn
+!
+SUBROUTINE INIT_NAM_CH_SEAFLUXn (CHS)
+!
+  USE MODD_CH_SEAFLUX_n, ONLY : CH_SEAFLUX_t
+!
+  IMPLICIT NONE
+
+!
+  TYPE(CH_SEAFLUX_t), INTENT(INOUT) :: CHS
+  REAL(KIND=JPRB) :: ZHOOK_HANDLE
+
+  IF (LHOOK) CALL DR_HOOK('MODN_SEAFLUX_N:INIT_NAM_CH_SEAFLUXN',0,ZHOOK_HANDLE)
+  CCH_DRY_DEP = CHS%CCH_DRY_DEP
+IF (LHOOK) CALL DR_HOOK('MODN_SEAFLUX_N:INIT_NAM_CH_SEAFLUXN',1,ZHOOK_HANDLE)
+END SUBROUTINE INIT_NAM_CH_SEAFLUXn
+
+SUBROUTINE UPDATE_NAM_CH_SEAFLUXn (CHS)
+!
+  USE MODD_CH_SEAFLUX_n, ONLY : CH_SEAFLUX_t
+!
+  IMPLICIT NONE
+
+!
+  TYPE(CH_SEAFLUX_t), INTENT(INOUT) :: CHS
+  REAL(KIND=JPRB) :: ZHOOK_HANDLE
+
+  IF (LHOOK) CALL DR_HOOK('MODN_SEAFLUX_N:UPDATE_NAM_CH_SEAFLUXN',0,ZHOOK_HANDLE)
+  CHS%CCH_DRY_DEP = CCH_DRY_DEP
+IF (LHOOK) CALL DR_HOOK('MODN_SEAFLUX_N:UPDATE_NAM_CH_SEAFLUXN',1,ZHOOK_HANDLE)
+END SUBROUTINE UPDATE_NAM_CH_SEAFLUXn
+
+SUBROUTINE INIT_NAM_DIAG_OCEANn (DGO)
+!
+  USE MODD_DIAG_OCEAN_n, ONLY : DIAG_OCEAN_t
+!
+  IMPLICIT NONE
+
+!
+  TYPE(DIAG_OCEAN_t), INTENT(INOUT) :: DGO
+  REAL(KIND=JPRB) :: ZHOOK_HANDLE
+
+  IF (LHOOK) CALL DR_HOOK('MODN_SEAFLUX_N:INIT_NAM_DIAG_OCEANN',0,ZHOOK_HANDLE)
+  LDIAG_OCEAN = DGO%LDIAG_OCEAN
+IF (LHOOK) CALL DR_HOOK('MODN_SEAFLUX_N:INIT_NAM_DIAG_OCEANN',1,ZHOOK_HANDLE)
+END SUBROUTINE INIT_NAM_DIAG_OCEANn
+
+SUBROUTINE UPDATE_NAM_DIAG_OCEANn (DGO)
+!
+  USE MODD_DIAG_OCEAN_n, ONLY : DIAG_OCEAN_t
+!
+  IMPLICIT NONE
+
+!
+  TYPE(DIAG_OCEAN_t), INTENT(INOUT) :: DGO
+  REAL(KIND=JPRB) :: ZHOOK_HANDLE
+
+  IF (LHOOK) CALL DR_HOOK('MODN_SEAFLUX_N:UPDATE_NAM_DIAG_OCEANN',0,ZHOOK_HANDLE)
+  DGO%LDIAG_OCEAN = LDIAG_OCEAN
+IF (LHOOK) CALL DR_HOOK('MODN_SEAFLUX_N:UPDATE_NAM_DIAG_OCEANN',1,ZHOOK_HANDLE)
+END SUBROUTINE UPDATE_NAM_DIAG_OCEANn
+
+SUBROUTINE INIT_NAM_SEAICEn (DGSI, S)
+!
+  USE MODD_DIAG_SEAICE_n, ONLY : DIAG_SEAICE_t
+  USE MODD_SEAFLUX_n, ONLY : SEAFLUX_t
+!
+  IMPLICIT NONE
+
+!
+  TYPE(DIAG_SEAICE_t), INTENT(INOUT) :: DGSI
+  TYPE(SEAFLUX_t), INTENT(INOUT) :: S
+  REAL(KIND=JPRB) :: ZHOOK_HANDLE
+
+  IF (LHOOK) CALL DR_HOOK('MODN_SEAFLUX_N:INIT_NAM_SEAICEN',0,ZHOOK_HANDLE)
+  LDIAG_SEAICE = DGSI%LDIAG_SEAICE
+  CINTERPOL_SIC = S%CINTERPOL_SIC
+  CINTERPOL_SIT = S%CINTERPOL_SIT
+  XSIC_EFOLDING_TIME=S%XSIC_EFOLDING_TIME
+  XSIT_EFOLDING_TIME=S%XSIT_EFOLDING_TIME
+  XSEAICE_TSTEP=S%XSEAICE_TSTEP
+  XFREEZING_SST = S%XFREEZING_SST
+  XCD_ICE_CST = S%XCD_ICE_CST
+  XSI_FLX_DRV = S%XSI_FLX_DRV
+IF (LHOOK) CALL DR_HOOK('MODN_SEAFLUX_N:INIT_NAM_SEAICEN',1,ZHOOK_HANDLE)
+END SUBROUTINE INIT_NAM_SEAICEn
+
+SUBROUTINE UPDATE_NAM_SEAICEn (DGSI, S)
+!
+  USE MODD_DIAG_SEAICE_n, ONLY : DIAG_SEAICE_t
+  USE MODD_SEAFLUX_n, ONLY : SEAFLUX_t
+!
+  IMPLICIT NONE
+
+!
+  TYPE(DIAG_SEAICE_t), INTENT(INOUT) :: DGSI
+  TYPE(SEAFLUX_t), INTENT(INOUT) :: S
+  REAL(KIND=JPRB) :: ZHOOK_HANDLE
+
+  IF (LHOOK) CALL DR_HOOK('MODN_SEAFLUX_N:UPDATE_NAM_SEAICEN',0,ZHOOK_HANDLE)
+  DGSI%LDIAG_SEAICE = LDIAG_SEAICE
+  S%CINTERPOL_SIC = CINTERPOL_SIC
+  S%CINTERPOL_SIT = CINTERPOL_SIT
+  S%XSIC_EFOLDING_TIME = XSIC_EFOLDING_TIME
+  S%XSIT_EFOLDING_TIME = XSIT_EFOLDING_TIME
+  S%XSEAICE_TSTEP = XSEAICE_TSTEP
+  S%XFREEZING_SST = XFREEZING_SST
+  S%XCD_ICE_CST = XCD_ICE_CST
+  S%XSI_FLX_DRV = XSI_FLX_DRV
+IF (LHOOK) CALL DR_HOOK('MODN_SEAFLUX_N:UPDATE_NAM_SEAICEN',1,ZHOOK_HANDLE)
+END SUBROUTINE UPDATE_NAM_SEAICEn
+
+END MODULE MODN_SEAFLUX_n
diff --git a/src/ARCH_SRC/CPL_WAVE/SURFEX/modn_sfx_oasis.F90 b/src/ARCH_SRC/CPL_WAVE/SURFEX/modn_sfx_oasis.F90
new file mode 100755
index 0000000000000000000000000000000000000000..f01bcecd9c25a3717f0eafaac6da059a3528bd82
--- /dev/null
+++ b/src/ARCH_SRC/CPL_WAVE/SURFEX/modn_sfx_oasis.F90
@@ -0,0 +1,176 @@
+!SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence
+!SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!SFX_LIC for details. version 1.
+!###############
+MODULE MODN_SFX_OASIS
+!###############
+!
+!!****  *MODN_SFX_OASIS - declaration of namelist for SFX-OASIS coupling
+!!
+!!    PURPOSE
+!!    -------
+!
+!!
+!!**  IMPLICIT ARGUMENTS
+!!    ------------------
+!!      None 
+!!
+!!    REFERENCE
+!!    ---------
+!!
+!!    AUTHOR
+!!    ------
+!!      B. Decharme   *Meteo France*
+!!
+!!    MODIFICATIONS
+!!    -------------
+!!      Original       10/13
+!!      Modified       11/2014 : J. Pianezze - add wave coupling parameters
+!!                                             and surface pressure parameter for ocean coupling
+!
+!*       0.   DECLARATIONS
+!             ------------
+!
+IMPLICIT NONE
+!
+!
+REAL             :: XTSTEP_CPL_LAND = -1.0  ! Coupling time step for land
+REAL             :: XTSTEP_CPL_SEA  = -1.0  ! Coupling time step for sea
+REAL             :: XTSTEP_CPL_LAKE = -1.0  ! Coupling time step for lake
+REAL             :: XTSTEP_CPL_WAVE = -1.0  ! Coupling time step for wave
+!
+!-------------------------------------------------------------------------------
+!
+! * Land surface variables for Surfex - Oasis coupling
+!
+!-------------------------------------------------------------------------------
+!
+! Output variables
+!
+ CHARACTER(LEN=8) :: CRUNOFF     = '        '   ! Surface runoff 
+ CHARACTER(LEN=8) :: CDRAIN      = '        '   ! Deep drainage 
+ CHARACTER(LEN=8) :: CCALVING    = '        '   ! Calving flux 
+ CHARACTER(LEN=8) :: CRECHARGE   = '        '   ! groundwater recharge 
+ CHARACTER(LEN=8) :: CSRCFLOOD   = '        '   ! Floodplains freshwater flux
+!
+! Input variables
+!
+ CHARACTER(LEN=8) :: CWTD        = '        '   ! water table depth
+ CHARACTER(LEN=8) :: CFWTD       = '        '   ! grid-cell fraction of water table rise
+ CHARACTER(LEN=8) :: CFFLOOD     = '        '   ! Floodplains fraction
+ CHARACTER(LEN=8) :: CPIFLOOD    = '        '   ! Flood potential infiltartion
+!
+!-------------------------------------------------------------------------------
+!
+! * Lake variables for Surfex - Oasis coupling
+!
+!-------------------------------------------------------------------------------
+!
+! Input variables
+!
+ CHARACTER(LEN=8) :: CLAKE_EVAP  = '        '   ! Evaporation over lake area
+ CHARACTER(LEN=8) :: CLAKE_RAIN  = '        '   ! Rainfall over lake area
+ CHARACTER(LEN=8) :: CLAKE_SNOW  = '        '   ! Snowfall over lake area
+ CHARACTER(LEN=8) :: CLAKE_WATF  = '        '   ! Net freshwater flux
+!
+!-------------------------------------------------------------------------------
+!
+! * Sea variables for Surfex - Oasis coupling 
+!
+!-------------------------------------------------------------------------------
+!
+! Sea Output variables
+!
+ CHARACTER(LEN=8) :: CSEA_FWSU = '        '   ! zonal wind stress 
+ CHARACTER(LEN=8) :: CSEA_FWSV = '        '   ! meridian wind stress 
+ CHARACTER(LEN=8) :: CSEA_HEAT = '        '   ! Non solar net heat flux
+ CHARACTER(LEN=8) :: CSEA_SNET = '        '   ! Solar net heat flux
+ CHARACTER(LEN=8) :: CSEA_WIND = '        '   ! module of 10m wind speed 
+ CHARACTER(LEN=8) :: CSEA_FWSM = '        '   ! module of wind stress 
+ CHARACTER(LEN=8) :: CSEA_EVAP = '        '   ! Evaporation 
+ CHARACTER(LEN=8) :: CSEA_RAIN = '        '   ! Rainfall 
+ CHARACTER(LEN=8) :: CSEA_SNOW = '        '   ! Snowfall 
+ CHARACTER(LEN=8) :: CSEA_EVPR = '        '   ! Evaporation - Preci.
+ CHARACTER(LEN=8) :: CSEA_WATF = '        '   ! Net freshwater flux
+ CHARACTER(LEN=8) :: CSEA_PRES = '        '   ! Surface pressure 
+!
+! Sea-ice Output variables
+!  
+ CHARACTER(LEN=8) :: CSEAICE_HEAT = '        '   ! Sea-ice non solar net heat flux
+ CHARACTER(LEN=8) :: CSEAICE_SNET = '        '   ! Sea-ice solar net heat flux 
+ CHARACTER(LEN=8) :: CSEAICE_EVAP = '        '   ! Sea-ice sublimation 
+!
+! Sea Input variables
+!
+ CHARACTER(LEN=8) :: CSEA_SST    = '        ' ! Sea surface temperature
+ CHARACTER(LEN=8) :: CSEA_UCU    = '        ' ! Sea u-current stress
+ CHARACTER(LEN=8) :: CSEA_VCU    = '        ' ! Sea v-current stress
+!
+! Sea-ice Input variables
+!
+ CHARACTER(LEN=8) :: CSEAICE_SIT = '        ' ! Sea-ice temperature
+ CHARACTER(LEN=8) :: CSEAICE_CVR = '        ' ! Sea-ice cover
+ CHARACTER(LEN=8) :: CSEAICE_ALB = '        ' ! Sea-ice albedo
+!
+!-------------------------------------------------------------------------------
+!
+! * Wave variables for Surfex - Oasis coupling 
+!
+!-------------------------------------------------------------------------------
+!
+! Wave Output variables
+!
+CHARACTER(LEN=8) :: CWAVE_U10  = '        '   ! 10m u-wind speed 
+CHARACTER(LEN=8) :: CWAVE_V10  = '        '   ! 10m u-wind speed 
+!
+! Wave Input variables
+!
+CHARACTER(LEN=8) :: CWAVE_CHA    = '        ' ! Charnock coefficient
+CHARACTER(LEN=8) :: CWAVE_UCU    = '        ' ! Wave u-current velocity
+CHARACTER(LEN=8) :: CWAVE_VCU    = '        ' ! Wave v-current velocity
+CHARACTER(LEN=8) :: CWAVE_HS     = '        ' ! Significant wave height
+CHARACTER(LEN=8) :: CWAVE_TP     = '        ' ! Peak period
+!
+! Switch to add water into sea oasis mask
+!
+LOGICAL          :: LWATER = .FALSE.
+!-------------------------------------------------------------------------------
+!
+!*       1.    NAMELISTS FOR LAND SURFACE FIELD
+!              ------------------------------------------------
+!
+NAMELIST/NAM_SFX_LAND_CPL/XTSTEP_CPL_LAND,                                &
+                         CRUNOFF,CDRAIN,CCALVING,CRECHARGE,CWTD,CFWTD,    &
+                         CFFLOOD,CPIFLOOD,CSRCFLOOD
+!
+!
+!*       2.    NAMELISTS FOR LAKE FIELD
+!              ---------------------------------------------------------------
+!
+NAMELIST/NAM_SFX_LAKE_CPL/XTSTEP_CPL_LAKE,                              &
+                          CLAKE_EVAP,CLAKE_RAIN,CLAKE_SNOW,CLAKE_WATF
+!
+!
+!*       3.    NAMELISTS FOR OCEANIC FIELD
+!              ---------------------------------------------------------------
+!
+NAMELIST/NAM_SFX_SEA_CPL/XTSTEP_CPL_SEA, LWATER,                               &
+                          CSEA_FWSU,CSEA_FWSV,CSEA_HEAT,CSEA_SNET,CSEA_WIND,   &
+                          CSEA_FWSM,CSEA_EVAP,CSEA_RAIN,CSEA_SNOW,CSEA_EVPR,   &
+                          CSEA_WATF,CSEA_PRES,CSEAICE_HEAT,CSEAICE_SNET,       &
+                          CSEAICE_EVAP,CSEA_SST,CSEA_UCU,CSEA_VCU,             &
+                          CSEAICE_SIT,CSEAICE_CVR,CSEAICE_ALB
+!
+!
+!*       4.    NAMELISTS FOR WAVE FIELD
+!              ---------------------------------------------------------------
+!
+NAMELIST/NAM_SFX_WAVE_CPL/XTSTEP_CPL_WAVE,                                     &
+                          CWAVE_U10, CWAVE_V10,                                &
+                          CWAVE_CHA, CWAVE_UCU, CWAVE_VCU, CWAVE_HS, CWAVE_TP
+ 
+!
+!-------------------------------------------------------------------------------
+!
+END MODULE MODN_SFX_OASIS
diff --git a/src/ARCH_SRC/CPL_WAVE/SURFEX/prep_hor_seaflux_field.F90 b/src/ARCH_SRC/CPL_WAVE/SURFEX/prep_hor_seaflux_field.F90
new file mode 100644
index 0000000000000000000000000000000000000000..8fe516aa5257c8063283cdd85c623776e86b7e5b
--- /dev/null
+++ b/src/ARCH_SRC/CPL_WAVE/SURFEX/prep_hor_seaflux_field.F90
@@ -0,0 +1,196 @@
+!SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence
+!SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!SFX_LIC for details. version 1.
+!     #########
+SUBROUTINE PREP_HOR_SEAFLUX_FIELD (DTCO, UG, U, &
+                                    DTS, O, OR, SG, S,GCP, &
+                                   HPROGRAM,HSURF,HATMFILE,HATMFILETYPE,HPGDFILE,HPGDFILETYPE)
+!     #################################################################################
+!
+!!****  *PREP_HOR_SEAFLUX_FIELD* - reads, interpolates and prepares a sea field
+!!
+!!    PURPOSE
+!!    -------
+!
+!!**  METHOD
+!!    ------
+!!
+!!    REFERENCE
+!!    ---------
+!!      
+!!
+!!    AUTHOR
+!!    ------
+!!     S. Malardel
+!!
+!!    MODIFICATIONS
+!!    -------------
+!!      Original    01/2004
+!!      P. Le Moigne 10/2005, Phasage Arome
+!!      P. Le Moigne 09/2007, sst from clim
+!!      S. Senesi    09/2013, extends to fields of SSS and SIC
+!!      Modified    03/2014 : M.N. Bouin  ! possibility of wave parameters
+!!                                        ! from external source
+!!------------------------------------------------------------------
+!
+
+!
+!
+!
+!
+!
+!
+!
+!
+USE MODD_DATA_COVER_n, ONLY : DATA_COVER_t
+USE MODD_SURF_ATM_GRID_n, ONLY : SURF_ATM_GRID_t
+USE MODD_SURF_ATM_n, ONLY : SURF_ATM_t
+!
+USE MODD_DATA_SEAFLUX_n, ONLY : DATA_SEAFLUX_t
+USE MODD_OCEAN_n, ONLY : OCEAN_t
+USE MODD_OCEAN_REL_n, ONLY : OCEAN_REL_t
+USE MODD_SEAFLUX_GRID_n, ONLY : SEAFLUX_GRID_t
+USE MODD_SEAFLUX_n, ONLY : SEAFLUX_t
+USE MODD_GRID_CONF_PROJ, ONLY : GRID_CONF_PROJ_t
+!
+USE MODD_PREP,           ONLY : CINGRID_TYPE, CINTERP_TYPE, XZS_LS, XLAT_OUT, XLON_OUT, &
+                                XX_OUT, XY_OUT, CMASK
+!
+USE MODI_READ_PREP_SEAFLUX_CONF
+USE MODI_PREP_SEAFLUX_GRIB
+USE MODI_PREP_SEAFLUX_UNIF
+USE MODI_PREP_SEAFLUX_BUFFER
+USE MODI_PREP_SEAFLUX_NETCDF
+USE MODI_HOR_INTERPOL
+USE MODI_GET_LUOUT
+USE MODI_PREP_SEAFLUX_EXTERN
+USE MODI_PREP_SST_INIT
+!
+USE MODI_PREP_HOR_OCEAN_FIELDS
+!
+USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
+USE PARKIND1  ,ONLY : JPRB
+!
+USE MODI_ABOR1_SFX
+IMPLICIT NONE
+!
+!*      0.1    declarations of arguments
+!
+!
+!
+TYPE(DATA_COVER_t), INTENT(INOUT) :: DTCO
+TYPE(SURF_ATM_GRID_t), INTENT(INOUT) :: UG
+TYPE(SURF_ATM_t), INTENT(INOUT) :: U
+!
+TYPE(DATA_SEAFLUX_t), INTENT(INOUT) :: DTS
+TYPE(OCEAN_t), INTENT(INOUT) :: O
+TYPE(OCEAN_REL_t), INTENT(INOUT) :: OR
+TYPE(SEAFLUX_GRID_t), INTENT(INOUT) :: SG
+TYPE(SEAFLUX_t), INTENT(INOUT) :: S
+TYPE(GRID_CONF_PROJ_t),INTENT(INOUT) :: GCP
+!
+ CHARACTER(LEN=6),   INTENT(IN)  :: HPROGRAM  ! program calling surf. schemes
+ CHARACTER(LEN=7),   INTENT(IN)  :: HSURF     ! type of field
+ CHARACTER(LEN=28),  INTENT(IN)  :: HATMFILE    ! name of the Atmospheric file
+ CHARACTER(LEN=6),   INTENT(IN)  :: HATMFILETYPE! type of the Atmospheric file
+ CHARACTER(LEN=28),  INTENT(IN)  :: HPGDFILE    ! name of the Atmospheric file
+ CHARACTER(LEN=6),   INTENT(IN)  :: HPGDFILETYPE! type of the Atmospheric file
+!
+!*      0.2    declarations of local variables
+!
+ CHARACTER(LEN=6)              :: YFILETYPE ! type of input file
+ CHARACTER(LEN=28)             :: YFILE     ! name of file
+ CHARACTER(LEN=6)              :: YFILEPGDTYPE ! type of input file
+ CHARACTER(LEN=28)             :: YFILEPGD     ! name of file
+REAL, POINTER, DIMENSION(:,:) :: ZFIELDIN  ! field to interpolate horizontally
+REAL, ALLOCATABLE, DIMENSION(:,:) :: ZFIELDOUT ! field interpolated   horizontally
+INTEGER                       :: ILUOUT    ! output listing logical unit
+!
+LOGICAL                       :: GUNIF     ! flag for prescribed uniform field
+REAL(KIND=JPRB) :: ZHOOK_HANDLE
+!-------------------------------------------------------------------------------------
+!
+!
+!*      1.     Reading of input file name and type
+!
+IF (LHOOK) CALL DR_HOOK('PREP_HOR_SEAFLUX_FIELD',0,ZHOOK_HANDLE)
+ CALL GET_LUOUT(HPROGRAM,ILUOUT)
+!
+ CALL READ_PREP_SEAFLUX_CONF(O, &
+                             HPROGRAM,HSURF,YFILE,YFILETYPE,YFILEPGD,YFILEPGDTYPE,&
+                            HATMFILE,HATMFILETYPE,HPGDFILE,HPGDFILETYPE,ILUOUT,GUNIF)
+!
+CMASK = 'SEA'
+!--------------------------------------------------------------------- ----------------
+!
+!*      2.     Reading of input  configuration (Grid and interpolation type)
+!
+IF (GUNIF) THEN
+  CALL PREP_SEAFLUX_UNIF(ILUOUT,HSURF,ZFIELDIN)
+ELSE IF (YFILETYPE=='GRIB  ') THEN
+  CALL PREP_SEAFLUX_GRIB(HPROGRAM,HSURF,YFILE,ILUOUT,ZFIELDIN)
+ELSE IF (YFILETYPE=='MESONH' .OR. YFILETYPE=='ASCII ' .OR. YFILETYPE=='LFI   '.OR. YFILETYPE=='FA    ') THEN        
+   CALL PREP_SEAFLUX_EXTERN(GCP,&
+                            HPROGRAM,HSURF,YFILE,YFILETYPE,YFILEPGD,YFILEPGDTYPE,ILUOUT,ZFIELDIN)
+ELSE IF (YFILETYPE=='BUFFER') THEN
+   CALL PREP_SEAFLUX_BUFFER(HPROGRAM,HSURF,ILUOUT,ZFIELDIN)
+ELSE IF (YFILETYPE=='NETCDF') THEN
+  CALL PREP_SEAFLUX_NETCDF(HPROGRAM,HSURF,YFILE,ILUOUT,ZFIELDIN)
+ELSE
+  CALL ABOR1_SFX('PREP_HOR_SEAFLUX_FIELD: data file type not supported : '//YFILETYPE)
+END IF
+!
+!
+!*      4.     Horizontal interpolation
+!
+ALLOCATE(ZFIELDOUT(SIZE(SG%XLAT),SIZE(ZFIELDIN,2)))
+!
+ CALL HOR_INTERPOL(DTCO, U,GCP, &
+                  ILUOUT,ZFIELDIN,ZFIELDOUT)
+!
+!*      5.     Return to historical variable
+!
+SELECT CASE (HSURF)
+ CASE('ZS     ') 
+  ALLOCATE(XZS_LS(SIZE(ZFIELDOUT,1)))
+  XZS_LS(:) = ZFIELDOUT(:,1)
+ CASE('SST    ')
+  ALLOCATE(S%XSST(SIZE(ZFIELDOUT,1)))
+  S%XSST(:) = ZFIELDOUT(:,1)
+  IF (DTS%LSST_DATA) THEN
+     ! XSST is derived from array XDATA_SST from MODD_DATA_SEAFLUX, with time interpolation
+     CALL PREP_SST_INIT(DTS, S, &
+                        S%XSST)
+  END IF
+  IF (O%LMERCATOR) THEN
+    ! Preparing input for ocean 1D model
+    CALL PREP_HOR_OCEAN_FIELDS(DTCO, UG, U, &
+                               O, OR, SG, S,GCP, &
+                               HPROGRAM,HSURF,YFILE,YFILETYPE,ILUOUT,GUNIF)
+  ENDIF
+ CASE('SSS    ')
+  ALLOCATE(S%XSSS(SIZE(ZFIELDOUT,1)))
+  S%XSSS(:) = ZFIELDOUT(:,1)
+ CASE('SIC    ')
+  ALLOCATE(S%XSIC(SIZE(ZFIELDOUT,1)))
+  S%XSIC(:) = ZFIELDOUT(:,1)
+ CASE('HS     ')
+  ALLOCATE(S%XHS(SIZE(ZFIELDOUT,1)))
+  S%XHS(:) = ZFIELDOUT(:,1)
+ CASE('TP     ')
+  ALLOCATE(S%XTP(SIZE(ZFIELDOUT,1)))
+  S%XTP(:) = ZFIELDOUT(:,1)
+END SELECT
+!
+!-------------------------------------------------------------------------------------
+!
+!*      6.     Deallocations
+!
+DEALLOCATE(ZFIELDIN )
+DEALLOCATE(ZFIELDOUT)
+IF (LHOOK) CALL DR_HOOK('PREP_HOR_SEAFLUX_FIELD',1,ZHOOK_HANDLE)
+!
+!-------------------------------------------------------------------------------------
+!
+END SUBROUTINE PREP_HOR_SEAFLUX_FIELD
diff --git a/src/ARCH_SRC/CPL_WAVE/SURFEX/prep_seaflux.F90 b/src/ARCH_SRC/CPL_WAVE/SURFEX/prep_seaflux.F90
new file mode 100644
index 0000000000000000000000000000000000000000..38663733c7478d7353b44603583c874ea97fe48b
--- /dev/null
+++ b/src/ARCH_SRC/CPL_WAVE/SURFEX/prep_seaflux.F90
@@ -0,0 +1,240 @@
+!SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence
+!SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!SFX_LIC for details. version 1.
+!     #########
+SUBROUTINE PREP_SEAFLUX (DTCO, UG, U, SM,GCP, &
+                         HPROGRAM,HATMFILE,HATMFILETYPE,HPGDFILE,HPGDFILETYPE)
+!     #################################################################################
+!
+!!****  *PREP_SEAFLUX* - prepares variables for SEAFLUX scheme
+!!
+!!    PURPOSE
+!!    -------
+!
+!!**  METHOD
+!!    ------
+!!
+!!    REFERENCE
+!!    ---------
+!!      
+!!
+!!    AUTHOR
+!!    ------
+!!     S. Malardel 
+!!
+!!    MODIFICATIONS
+!!    -------------
+!!      Original    01/2004
+!!      S. Riette   06/2009 PREP_SEAFLUX_SBL has no more argument
+!!      Modified    07/2012, P. Le Moigne : CMO1D phasing
+!!      Modified    01/2014, S. Senesi : introduce sea-ice model 
+!!      Modified    01/2015, R. Séférian : introduce ocean surface albedo 
+!!      Modified    03/2014 : M.N. Bouin  ! possibility of wave parameters
+!!                                        ! from external source
+!!------------------------------------------------------------------
+!
+!
+USE MODD_SURFEX_n, ONLY : SEAFLUX_MODEL_t
+!
+!
+USE MODD_DATA_COVER_n, ONLY : DATA_COVER_t
+USE MODD_SURF_ATM_GRID_n, ONLY : SURF_ATM_GRID_t
+USE MODD_SURF_ATM_n, ONLY : SURF_ATM_t
+USE MODD_GRID_CONF_PROJ, ONLY : GRID_CONF_PROJ_t
+!
+USE MODI_PREP_HOR_SEAFLUX_FIELD
+USE MODI_PREP_VER_SEAFLUX
+USE MODI_PREP_OUTPUT_GRID
+USE MODI_PREP_SEAFLUX_SBL
+USE MODI_PREP_SEAICE
+USE MODI_GET_LUOUT
+!
+USE MODN_PREP_SEAFLUX
+USE MODD_READ_NAMELIST,  ONLY : LNAM_READ
+USE MODD_PREP,           ONLY : XZS_LS
+USE MODD_SURF_ATM,       ONLY : LVERTSHIFT
+!
+!
+USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
+USE PARKIND1  ,ONLY : JPRB
+!
+USE MODI_CLEAN_PREP_OUTPUT_GRID
+!
+IMPLICIT NONE
+!
+!*      0.1    declarations of arguments
+!
+!
+TYPE(DATA_COVER_t), INTENT(INOUT) :: DTCO
+TYPE(SURF_ATM_GRID_t), INTENT(INOUT) :: UG
+TYPE(SURF_ATM_t), INTENT(INOUT) :: U
+TYPE(SEAFLUX_MODEL_t), INTENT(INOUT) :: SM
+TYPE(GRID_CONF_PROJ_t),INTENT(INOUT) :: GCP
+!
+ CHARACTER(LEN=6),   INTENT(IN)  :: HPROGRAM  ! program calling surf. schemes
+ CHARACTER(LEN=28),  INTENT(IN)  :: HATMFILE    ! name of the Atmospheric file
+ CHARACTER(LEN=6),   INTENT(IN)  :: HATMFILETYPE! type of the Atmospheric file
+ CHARACTER(LEN=28),  INTENT(IN)  :: HPGDFILE    ! name of the Atmospheric file
+ CHARACTER(LEN=6),   INTENT(IN)  :: HPGDFILETYPE! type of the Atmospheric file
+!
+!*      0.2    declarations of local variables
+!
+INTEGER :: JMTH,INMTH
+INTEGER :: ILUOUT
+LOGICAL :: GFOUND         ! Return code when searching namelist
+INTEGER :: ILUNAM         ! logical unit of namelist file
+REAL(KIND=JPRB) :: ZHOOK_HANDLE
+
+!-------------------------------------------------------------------------------------
+!
+!*      0.     Default of configuration
+!
+!
+IF (LHOOK) CALL DR_HOOK('PREP_SEAFLUX',0,ZHOOK_HANDLE)
+ CALL GET_LUOUT(HPROGRAM,ILUOUT)
+!
+ CALL PREP_OUTPUT_GRID(UG, U, &
+                       ILUOUT,SM%SG%CGRID,SM%SG%XGRID_PAR,SM%SG%XLAT,SM%SG%XLON)
+!
+!-------------------------------------------------------------------------------------
+!
+!*      1.     Read namelist
+!
+SM%S%LSBL = LSEA_SBL
+SM%O%LMERCATOR = LOCEAN_MERCATOR
+SM%O%LCURRENT  = LOCEAN_CURRENT
+! Relaxation-forcing parameters
+SM%OR%XTAU_REL   = XTIME_REL
+SM%OR%XQCORR     = XCORFLX
+!
+SM%OR%LREL_CUR   = LCUR_REL
+SM%OR%LREL_TS    = LTS_REL
+SM%OR%LFLUX_NULL = LZERO_FLUX
+SM%OR%LFLX_CORR  = LCORR_FLUX
+SM%OR%LDIAPYCNAL = LDIAPYC
+!
+!-------------------------------------------------------------------------------------
+!
+!*      2.     Reading and horizontal interpolations
+!
+!
+!*      2.0    Large scale orography
+!
+ CALL PREP_HOR_SEAFLUX_FIELD(DTCO, UG, U, &
+                            SM%DTS, SM%O, SM%OR, SM%SG, SM%S, GCP,&
+                            HPROGRAM,'ZS     ',HATMFILE,HATMFILETYPE,HPGDFILE,HPGDFILETYPE)
+!
+!*      2.1.1    Temperature
+!
+ CALL PREP_HOR_SEAFLUX_FIELD(DTCO, UG, U, &
+                            SM%DTS, SM%O, SM%OR, SM%SG, SM%S,GCP, &
+                            HPROGRAM,'SST    ',HATMFILE,HATMFILETYPE,HPGDFILE,HPGDFILETYPE)
+!
+!*      2.1.2    Salinity
+!
+
+ CALL PREP_HOR_SEAFLUX_FIELD(DTCO, UG, U, &
+                            SM%DTS, SM%O, SM%OR, SM%SG, SM%S,GCP, &
+                            HPROGRAM,'SSS    ',HATMFILE,HATMFILETYPE,HPGDFILE,HPGDFILETYPE)
+!
+!*      2.1.3   Sea-ice
+!
+IF (CSEAICE_SCHEME /= 'NONE  ') THEN 
+   CALL PREP_SEAICE(UG, &
+                    DTCO, SM%DTS, SM%O, SM%OR, SM%SG, SM%S, U,GCP, &
+                    HPROGRAM,HATMFILE,HATMFILETYPE,HPGDFILE,HPGDFILETYPE)
+ENDIF
+!
+!*      2.2    Significant height and peak period
+!
+ CALL PREP_HOR_SEAFLUX_FIELD(DTCO, UG, U, &
+                            SM%DTS, SM%O, SM%OR, SM%SG, SM%S,GCP, &
+                            HPROGRAM,'HS     ',HATMFILE,HATMFILETYPE,HPGDFILE,HPGDFILETYPE)
+ CALL PREP_HOR_SEAFLUX_FIELD(DTCO, UG, U, &
+                            SM%DTS, SM%O, SM%OR, SM%SG, SM%S,GCP, &
+                            HPROGRAM,'TP     ',HATMFILE,HATMFILETYPE,HPGDFILE,HPGDFILETYPE)
+!
+!
+!*      2.2    Roughness
+!
+ALLOCATE(SM%S%XZ0(SIZE(SM%S%XSST)))
+SM%S%XZ0 = 0.001
+!
+ALLOCATE(SM%S%XZ0H(SIZE(SM%S%XSST)))
+SM%S%XZ0H = SM%S%XZ0
+!
+!*      2.3   Ocean Surface Albedo
+!
+IF(SM%S%CSEA_ALB=='RS14')THEN
+  ALLOCATE(SM%S%XDIR_ALB(SIZE(SM%S%XSST)))
+  ALLOCATE(SM%S%XSCA_ALB(SIZE(SM%S%XSST)))
+  SM%S%XDIR_ALB = 0.065
+  SM%S%XSCA_ALB = 0.065
+ENDIF
+!
+!-------------------------------------------------------------------------------------
+ CALL CLEAN_PREP_OUTPUT_GRID
+!-------------------------------------------------------------------------------------
+!
+!*      3.     Vertical interpolations of all variables
+!
+IF(LVERTSHIFT)THEN
+  CALL PREP_VER_SEAFLUX(SM%S)
+ENDIF
+!
+DEALLOCATE(XZS_LS)
+!
+!-------------------------------------------------------------------------------------
+!
+!*      4.     Preparation of optional interpolation of monthly sst
+!
+SM%S%LINTERPOL_SST=.FALSE.
+IF(TRIM(SM%S%CINTERPOL_SST)/='NONE')THEN
+!
+  SM%S%LINTERPOL_SST=.TRUE.
+!
+! Precedent, Current, Next, and Second-next Monthly SST
+  INMTH=4
+!
+  ALLOCATE(SM%S%XSST_MTH(SIZE(SM%S%XSST),INMTH))
+  DO JMTH=1,INMTH
+     SM%S%XSST_MTH(:,JMTH)=SM%S%XSST(:)
+  ENDDO
+!
+ENDIF
+!
+!-------------------------------------------------------------------------------------
+!
+!
+!*      5.     Optional preparation of interpolation of monthly Sea Surface salinity
+!
+SM%S%LINTERPOL_SSS=.FALSE.
+IF(TRIM(SM%S%CINTERPOL_SSS)/='NONE')THEN
+!
+   SM%S%LINTERPOL_SSS=.TRUE.
+   !
+   ! Precedent, Current, Next, and Second-next Monthly SSS
+   INMTH=4
+   !
+   ALLOCATE(SM%S%XSSS_MTH(SIZE(SM%S%XSSS),INMTH))
+   DO JMTH=1,INMTH
+      SM%S%XSSS_MTH(:,JMTH)=SM%S%XSSS(:)
+   ENDDO
+   !
+ENDIF
+!
+!-------------------------------------------------------------------------------------
+!
+!*      6.     Preparation of SBL air variables
+!
+!
+IF (SM%S%LSBL) CALL PREP_SEAFLUX_SBL(SM%SG, SM%SSB)
+!
+!-------------------------------------------------------------------------------------
+!
+IF (LHOOK) CALL DR_HOOK('PREP_SEAFLUX',1,ZHOOK_HANDLE)
+!
+!-------------------------------------------------------------------------------------
+!
+END SUBROUTINE PREP_SEAFLUX
diff --git a/src/ARCH_SRC/CPL_WAVE/SURFEX/prep_seaflux_netcdf.F90 b/src/ARCH_SRC/CPL_WAVE/SURFEX/prep_seaflux_netcdf.F90
new file mode 100644
index 0000000000000000000000000000000000000000..347693749b4e67aa7a5120703d070af723993338
--- /dev/null
+++ b/src/ARCH_SRC/CPL_WAVE/SURFEX/prep_seaflux_netcdf.F90
@@ -0,0 +1,127 @@
+!SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence
+!SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!SFX_LIC for details. version 1.
+!     #########
+SUBROUTINE PREP_SEAFLUX_NETCDF(HPROGRAM,HSURF,HFILE,KLUOUT,PFIELD)
+!     #################################################################################
+!
+!!****  *PREP_SEAFLUX_NETCDF* - prepares SEAFLUX fields from oceanic analyses in NETCDF
+!!
+!!    PURPOSE
+!!    -------
+!
+!!**  METHOD
+!!    ------
+!!
+!!    REFERENCE
+!!    ---------
+!!      
+!!
+!!    AUTHOR
+!!    ------
+!!     C. Lebeaupin Brossier
+!!
+!!    MODIFICATIONS
+!!    -------------
+!!      Original    01/2008
+!!      Modified    09/2013 : S. Senesi : extends to SSS and SIC fields 
+!!      Modified    03/2014 : M.N. Bouin  ! possibility of wave parameters
+!!                                        ! from external source
+!!------------------------------------------------------------------
+!
+USE MODE_READ_NETCDF_MERCATOR
+!
+!USE MODD_TYPE_DATE_SURF
+!
+USE MODD_PREP,       ONLY : CINGRID_TYPE
+USE MODD_GRID_LATLONREGUL,  ONLY : NILENGTH
+!
+!
+USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
+USE PARKIND1  ,ONLY : JPRB
+!
+IMPLICIT NONE
+!
+!*      0.1    declarations of arguments
+!
+ CHARACTER(LEN=6),   INTENT(IN)  :: HPROGRAM  ! program calling surf. schemes
+ CHARACTER(LEN=7),   INTENT(IN)  :: HSURF     ! type of field
+ CHARACTER(LEN=28),  INTENT(IN)  :: HFILE     ! name of file
+INTEGER,            INTENT(IN)  :: KLUOUT    ! logical unit of output listing
+REAL,DIMENSION(:,:), POINTER    :: PFIELD    ! field to interpolate horizontally
+!
+!*      0.2    declarations of local variables
+!
+!TYPE (DATE_TIME)                :: TZTIME_GRIB    ! current date and time
+!CHARACTER(LEN=6)              :: YINMODEL ! model from which GRIB file originates
+REAL, DIMENSION(:),       POINTER :: ZFIELD   ! field read
+ CHARACTER(LEN=28) :: YNCVAR
+REAL(KIND=JPRB) :: ZHOOK_HANDLE
+!
+!-------------------------------------------------------------------------------------
+!
+!*      1.     Grid type
+!              ---------
+IF (LHOOK) CALL DR_HOOK('PREP_SEAFLUX_NETCDF',0,ZHOOK_HANDLE)
+CINGRID_TYPE='LATLON '
+!
+!*      2.     Reading of field
+!              ----------------
+!-----------------
+SELECT CASE(HSURF)
+!-----------------
+!
+!* 2.1 Orography
+!      ---------
+!
+  CASE('ZS     ')
+    YNCVAR='topo'
+    CALL PREP_NETCDF_GRID(HFILE,YNCVAR)
+    CALL READ_NETCDF_ZS_SEA(HFILE,YNCVAR,ZFIELD)
+    ALLOCATE(PFIELD(MAX(1,NILENGTH),1))
+    PFIELD(:,1) = ZFIELD(:)
+    DEALLOCATE(ZFIELD)
+!
+!
+!* 2.2 Temperature profiles
+!      --------------------
+!
+  CASE('SST    ','SSS    ','SIC    ')
+    IF ( HSURF == 'SST    ') THEN
+       YNCVAR='temperature'
+    ELSE IF ( HSURF == 'SSS    ') THEN
+       YNCVAR='sss'
+    ELSE IF ( HSURF == 'SIC    ') THEN
+       YNCVAR='sic'
+    END IF
+    CALL PREP_NETCDF_GRID(HFILE,YNCVAR)
+    CALL READ_NETCDF_SST(HFILE,YNCVAR,ZFIELD)
+    ALLOCATE(PFIELD(MAX(1,NILENGTH),1))
+    PFIELD(:,1) = ZFIELD(:)
+    DEALLOCATE(ZFIELD)
+!
+!
+!* 2.3 Wave parameters
+!      --------------------
+!
+  CASE('HS     ')
+    YNCVAR='significant_h'
+    CALL PREP_NETCDF_GRID(HFILE,YNCVAR)
+    CALL READ_NETCDF_WAVE(HFILE,YNCVAR,ZFIELD)
+    ALLOCATE(PFIELD(MAX(1,NILENGTH),1))
+    PFIELD(:,1) = ZFIELD(:)
+    DEALLOCATE(ZFIELD)
+!
+  CASE('TP     ')
+    YNCVAR='peak_period'
+    CALL PREP_NETCDF_GRID(HFILE,YNCVAR)
+    CALL READ_NETCDF_WAVE(HFILE,YNCVAR,ZFIELD)
+    ALLOCATE(PFIELD(MAX(1,NILENGTH),1))
+    PFIELD(:,1) = ZFIELD(:)
+    DEALLOCATE(ZFIELD)
+!
+END SELECT
+IF (LHOOK) CALL DR_HOOK('PREP_SEAFLUX_NETCDF',1,ZHOOK_HANDLE)
+!-------------------------------------------------------------------------------------
+END SUBROUTINE PREP_SEAFLUX_NETCDF
diff --git a/src/ARCH_SRC/CPL_WAVE/SURFEX/prep_seaflux_unif.F90 b/src/ARCH_SRC/CPL_WAVE/SURFEX/prep_seaflux_unif.F90
new file mode 100644
index 0000000000000000000000000000000000000000..7af8afcc85c3657e2f0979ed1ee0c9b925115e0b
--- /dev/null
+++ b/src/ARCH_SRC/CPL_WAVE/SURFEX/prep_seaflux_unif.F90
@@ -0,0 +1,103 @@
+!SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence
+!SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!SFX_LIC for details. version 1.
+!     #########
+SUBROUTINE PREP_SEAFLUX_UNIF(KLUOUT,HSURF,PFIELD)
+!     #################################################################################
+!
+!!****  *PREP_SEAFLUX_UNIF* - prepares SEAFLUX field from prescribed values
+!!
+!!    PURPOSE
+!!    -------
+!
+!!**  METHOD
+!!    ------
+!!
+!!    REFERENCE
+!!    ---------
+!!      
+!!
+!!    AUTHOR
+!!    ------
+!!     S. Malardel
+!!
+!!    MODIFICATIONS
+!!    -------------
+!!      Original    01/2004
+!!      Modified    09/2013 : S. Senesi : extends to SSS and SIC variables
+!!      Modified    03/2014 : M.N. Bouin  ! possibility of wave parameters
+!!                                        ! from external source
+!!------------------------------------------------------------------
+!
+
+!
+USE MODD_PREP,       ONLY : CINTERP_TYPE
+USE MODD_PREP_SEAFLUX,   ONLY : XSST_UNIF, XSSS_UNIF, XSIC_UNIF
+!
+!
+USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
+USE PARKIND1  ,ONLY : JPRB
+!
+IMPLICIT NONE
+!
+!*      0.1    declarations of arguments
+!
+INTEGER,            INTENT(IN)  :: KLUOUT    ! output listing logical unit
+ CHARACTER(LEN=7),   INTENT(IN)  :: HSURF     ! type of field
+REAL, POINTER, DIMENSION(:,:)   :: PFIELD    ! field to interpolate horizontally
+REAL(KIND=JPRB) :: ZHOOK_HANDLE
+!
+!*      0.2    declarations of local variables
+!
+!
+!-------------------------------------------------------------------------------------
+!
+IF (LHOOK) CALL DR_HOOK('PREP_SEAFLUX_UNIF',0,ZHOOK_HANDLE)
+SELECT CASE(HSURF)
+!
+!*      3.0    Orography
+!
+  CASE('ZS     ')
+    ALLOCATE(PFIELD(1,1))
+    PFIELD = 0.
+!
+!*      3.1    Sea surface temperature
+!
+  CASE('SST    ')
+    ALLOCATE(PFIELD(1,1))
+    PFIELD = XSST_UNIF
+!
+!*      3.2    Sea surface salinity
+!
+  CASE('SSS    ')
+    ALLOCATE(PFIELD(1,1))
+    PFIELD = XSSS_UNIF
+!
+!
+!*      3.3    Sea Ice Cover
+!
+  CASE('SIC    ')
+    ALLOCATE(PFIELD(1,1))
+    PFIELD = XSIC_UNIF
+!
+!*      3.4    Wave parameters
+!
+  CASE('HS     ')
+    ALLOCATE(PFIELD(1,1))
+    PFIELD = 1.
+!
+  CASE('TP     ')
+    ALLOCATE(PFIELD(1,1))
+    PFIELD = 8.
+END SELECT
+!
+!*      4.     Interpolation method
+!              --------------------
+!
+CINTERP_TYPE='UNIF  '
+IF (LHOOK) CALL DR_HOOK('PREP_SEAFLUX_UNIF',1,ZHOOK_HANDLE)
+!
+!
+!-------------------------------------------------------------------------------------
+END SUBROUTINE PREP_SEAFLUX_UNIF
diff --git a/src/ARCH_SRC/CPL_WAVE/SURFEX/put_sfx_sea.F90 b/src/ARCH_SRC/CPL_WAVE/SURFEX/put_sfx_sea.F90
new file mode 100644
index 0000000000000000000000000000000000000000..779c8076a1572b62ae115ef86e0a7a856d096bbe
--- /dev/null
+++ b/src/ARCH_SRC/CPL_WAVE/SURFEX/put_sfx_sea.F90
@@ -0,0 +1,291 @@
+!SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence
+!SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!SFX_LIC for details. version 1.
+!     #########
+      SUBROUTINE PUT_SFX_SEA (S, U, W, &
+                              KLUOUT,OCPL_SEAICE,OWATER,PSEA_SST,PSEA_UCU,        &
+                             PSEA_VCU,PSEAICE_SIT,PSEAICE_CVR,PSEAICE_ALB )  
+!     ####################################################
+!
+!!****  *PUT_SFX_SEA* - routine to put some variables from
+!!                       an oceanic general circulation model
+!!    PURPOSE
+!!    -------
+!!
+!!**  METHOD
+!!    ------
+!!
+!!    EXTERNAL
+!!    --------
+!!
+!!
+!!    IMPLICIT ARGUMENTS
+!!    ------------------
+!!
+!!    REFERENCE
+!!    ---------
+!!
+!!
+!!    AUTHOR
+!!    ------
+!!      B. Decharme      *Meteo France*
+!!
+!!    MODIFICATIONS
+!!    -------------
+!!      Original    08/2009
+!-------------------------------------------------------------------------------
+!
+!*       0.    DECLARATIONS
+!              ------------
+!
+!
+USE MODD_SEAFLUX_n, ONLY : SEAFLUX_t
+USE MODD_SURF_ATM_n, ONLY : SURF_ATM_t
+USE MODD_WATFLUX_n, ONLY : WATFLUX_t
+!
+USE MODD_SURF_PAR,   ONLY : NUNDEF, XUNDEF
+USE MODD_SFX_OASIS
+USE MODD_CSTS,       ONLY : XTT, XTTS, XICEC
+!
+!
+USE MODI_PACK_SAME_RANK
+USE MODI_ABOR1_SFX
+!
+USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
+USE PARKIND1  ,ONLY : JPRB
+!
+IMPLICIT NONE
+!
+!*       0.1   Declarations of arguments
+!              -------------------------
+!
+!
+TYPE(SEAFLUX_t), INTENT(INOUT) :: S
+TYPE(SURF_ATM_t), INTENT(INOUT) :: U
+TYPE(WATFLUX_t), INTENT(INOUT) :: W
+!
+INTEGER,           INTENT(IN)  :: KLUOUT
+LOGICAL,           INTENT(IN)  :: OCPL_SEAICE
+LOGICAL,           INTENT(IN)  :: OWATER
+!
+REAL, DIMENSION(:), INTENT(IN) :: PSEA_SST
+REAL, DIMENSION(:), INTENT(IN) :: PSEA_UCU
+REAL, DIMENSION(:), INTENT(IN) :: PSEA_VCU
+REAL, DIMENSION(:), INTENT(IN) :: PSEAICE_SIT
+REAL, DIMENSION(:), INTENT(IN) :: PSEAICE_CVR
+REAL, DIMENSION(:), INTENT(IN) :: PSEAICE_ALB
+!
+!*       0.2   Declarations of local variables
+!              -------------------------------
+!
+!
+ CHARACTER(LEN=50)     :: YCOMMENT
+!
+REAL(KIND=JPRB) :: ZHOOK_HANDLE
+!
+!-------------------------------------------------------------------------------
+!
+IF (LHOOK) CALL DR_HOOK('PUT_SFX_SEA',0,ZHOOK_HANDLE)
+!
+!*       1.0   Initialization
+!              --------------
+!
+!
+!*       2.0   Get variable over sea
+!              ---------------------
+!
+IF(U%NSIZE_SEA>0)THEN
+! 
+  CALL TREAT_SEA(U%NSIZE_SEA)
+!
+ENDIF
+!
+!*       3.0   Get variable over water without flake
+!              -------------------------------------
+!
+IF(OWATER.AND.U%NSIZE_WATER>0)THEN
+!
+  CALL TREAT_WATER(U%NSIZE_WATER)
+!
+ENDIF
+!
+IF (LHOOK) CALL DR_HOOK('PUT_SFX_SEA',1,ZHOOK_HANDLE)
+!
+!-------------------------------------------------------------------------------
+ CONTAINS
+!-------------------------------------------------------------------------------
+!
+SUBROUTINE TREAT_SEA(KLU)
+!
+USE MODI_PACK_SAME_RANK
+!
+IMPLICIT NONE
+!
+INTEGER,     INTENT(IN) :: KLU
+!
+REAL,    DIMENSION(KLU) :: ZSST     ! sea surface temperature
+REAL,    DIMENSION(KLU) :: ZICE_FRAC! ice fraction
+REAL                    :: ZTMIN    ! Minimum temperature over this proc
+REAL                    :: ZTMAX    ! Maximum temperature over this proc
+ CHARACTER(LEN=50)       :: YCOMMENT
+!
+REAL(KIND=JPRB) :: ZHOOK_HANDLE
+!
+IF (LHOOK) CALL DR_HOOK('PUT_SFX_SEA:TREAT_SEA',0,ZHOOK_HANDLE)
+!
+IF(NSEA_SST_ID/=NUNDEF)THEN
+  YCOMMENT='Sea surface temperature'
+  CALL PACK_SAME_RANK(U%NR_SEA(:),PSEA_SST(:),ZSST(:))
+  WHERE (ZSST(:)/=0.0) S%XSST(:)=ZSST(:)
+  CALL CHECK_SEA(YCOMMENT,S%XSST(:))
+!
+  ZTMIN=MINVAL(S%XSST(:))
+  ZTMAX=MAXVAL(S%XSST(:))
+!
+  IF(ZTMIN<=0.0.OR.ZTMAX>500.)THEN
+    WRITE(KLUOUT,*)'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!'
+    WRITE(KLUOUT,*)'SST from ocean model not define or not physic'
+    WRITE(KLUOUT,*)'SST MIN =',ZTMIN,'SST MAX =',ZTMAX
+    WRITE(KLUOUT,*)'There is certainly a problem between         '
+    WRITE(KLUOUT,*)'SURFEX and OASIS sea/land mask               '
+    WRITE(KLUOUT,*)'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!'
+    CALL ABOR1_SFX('PUT_SFX_SEA: SST from ocean model not define or not physic')
+  ENDIF
+ENDIF
+!
+IF(NSEA_UCU_ID/=NUNDEF)THEN
+  YCOMMENT='Sea u-current stress'
+  CALL PACK_SAME_RANK(U%NR_SEA(:),PSEA_UCU(:),S%XUMER(:))
+  CALL CHECK_SEA(YCOMMENT,S%XUMER(:))
+ENDIF
+!
+IF(NSEA_VCU_ID/=NUNDEF)THEN
+  YCOMMENT='Sea v-current stress'
+  CALL PACK_SAME_RANK(U%NR_SEA(:),PSEA_VCU(:),S%XVMER(:))
+  CALL CHECK_SEA(YCOMMENT,S%XVMER(:))
+ENDIF
+!
+IF(OCPL_SEAICE)THEN
+!
+  YCOMMENT='Sea-ice Temperature'
+  CALL PACK_SAME_RANK(U%NR_SEA(:),PSEAICE_SIT(:),S%XTICE(:))
+  CALL CHECK_SEA(YCOMMENT,S%XTICE(:))
+!
+  YCOMMENT='Sea-ice cover'
+  CALL PACK_SAME_RANK(U%NR_SEA(:),PSEAICE_CVR(:),ZICE_FRAC(:))
+  CALL CHECK_SEA(YCOMMENT,ZICE_FRAC(:))
+!
+  WHERE(ZICE_FRAC(:)>=XICEC)
+    S%XSST(:) = MIN(S%XSST(:),XTTS-0.01)
+  ELSEWHERE
+    S%XSST(:) = MAX(S%XSST(:),XTTS)
+  ENDWHERE
+!
+  YCOMMENT='Sea-ice albedo'
+  CALL PACK_SAME_RANK(U%NR_SEA(:),PSEAICE_ALB(:),S%XICE_ALB(:))
+  CALL CHECK_SEA(YCOMMENT,S%XICE_ALB(:))
+!
+! Fill the table with sea ice albedo where temperature is lower than the
+! freezing point
+  WHERE(S%XSST(:) < XTTS)
+    S%XDIR_ALB(:)=S%XICE_ALB(:)
+    S%XSCA_ALB(:)=S%XICE_ALB(:)
+  ENDWHERE
+!
+ENDIF
+!
+IF (LHOOK) CALL DR_HOOK('PUT_SFX_SEA:TREAT_SEA',1,ZHOOK_HANDLE)
+!
+END SUBROUTINE TREAT_SEA
+!
+!-------------------------------------------------------------------------------
+!
+SUBROUTINE TREAT_WATER(KLU)
+!
+!
+IMPLICIT NONE
+!
+INTEGER,     INTENT(IN) :: KLU
+!
+REAL,    DIMENSION(KLU) :: ZICE_FRAC! ice fraction
+REAL                    :: ZTMIN    ! Minimum temperature over this proc
+REAL                    :: ZTMAX    ! Maximum temperature over this proc
+ CHARACTER(LEN=50)       :: YCOMMENT
+!
+REAL(KIND=JPRB) :: ZHOOK_HANDLE
+!
+IF (LHOOK) CALL DR_HOOK('PUT_SFX_SEA:TREAT_WATER',0,ZHOOK_HANDLE)
+!
+YCOMMENT='Water surface temperature'
+ CALL PACK_SAME_RANK(U%NR_WATER(:),PSEA_SST(:),W%XTS(:))
+ CALL CHECK_SEA(YCOMMENT,W%XTS(:))
+!
+ZTMIN=MINVAL(W%XTS(:))
+ZTMAX=MAXVAL(W%XTS(:))
+!
+IF(ZTMIN<=0.0.OR.ZTMAX>500.)THEN
+  WRITE(KLUOUT,*)'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!'
+  WRITE(KLUOUT,*)'TS_WATER from ocean model not define or not physic'
+  WRITE(KLUOUT,*)'TS_WATER MIN =',ZTMIN,'TS_WATER MAX =',ZTMAX
+  WRITE(KLUOUT,*)'There is certainly a problem between              '
+  WRITE(KLUOUT,*)'SURFEX and OASIS sea/land mask                    '
+  WRITE(KLUOUT,*)'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!'
+  CALL ABOR1_SFX('PUT_SFX_SEA: SST from ocean model not define or not physic')
+ENDIF
+!
+YCOMMENT='Water-ice Temperature'
+ CALL PACK_SAME_RANK(U%NR_WATER(:),PSEAICE_SIT(:),W%XTICE(:))
+ CALL CHECK_SEA(YCOMMENT,W%XTICE(:))
+!
+YCOMMENT='Water-ice cover'
+ CALL PACK_SAME_RANK(U%NR_WATER(:),PSEAICE_CVR(:),ZICE_FRAC(:))
+ CALL CHECK_SEA(YCOMMENT,ZICE_FRAC(:))
+!
+WHERE(ZICE_FRAC(:)>=XICEC)
+  W%XTS(:) = MIN(W%XTS(:),XTT-0.01)
+ELSEWHERE
+  W%XTS(:) = MAX(W%XTS(:),XTT)
+ENDWHERE
+!
+YCOMMENT='Water-ice albedo'
+ CALL PACK_SAME_RANK(U%NR_WATER(:),PSEAICE_ALB(:),W%XICE_ALB(:))
+ CALL CHECK_SEA(YCOMMENT,W%XICE_ALB(:))
+!
+! Fill the table with sea ice albedo where temperature is lower than the freezing
+! point
+WHERE(W%XTS(:) < XTT)
+  W%XDIR_ALB(:)=W%XICE_ALB(:)
+  W%XSCA_ALB(:)=W%XICE_ALB(:)
+ENDWHERE
+!
+IF (LHOOK) CALL DR_HOOK('PUT_SFX_SEA:TREAT_WATER',1,ZHOOK_HANDLE)
+!
+END SUBROUTINE TREAT_WATER
+!
+!-------------------------------------------------------------------------------
+!
+SUBROUTINE CHECK_SEA(HCOMMENT,PFIELD)
+!
+IMPLICIT NONE
+!
+ CHARACTER(LEN=*),   INTENT(IN) :: HCOMMENT
+REAL, DIMENSION(:), INTENT(IN) :: PFIELD
+!
+REAL(KIND=JPRB) :: ZHOOK_HANDLE
+!
+IF (LHOOK) CALL DR_HOOK('PUT_SFX_SEA:CHECK_SEA',0,ZHOOK_HANDLE)
+!
+IF(ANY(PFIELD(:)>=XUNDEF))THEN
+  WRITE(KLUOUT,*)'PUT_SFX_SEA: problem after get '//TRIM(HCOMMENT)//' from OASIS'
+  WRITE(KLUOUT,*)'PUT_SFX_SEA: some points not defined = ',COUNT(PFIELD(:)>=XUNDEF)
+  CALL ABOR1_SFX('PUT_SFX_SEA: problem after get '//TRIM(HCOMMENT)//' from OASIS')          
+ENDIF
+!
+IF (LHOOK) CALL DR_HOOK('PUT_SFX_SEA:CHECK_SEA',1,ZHOOK_HANDLE)
+!
+END SUBROUTINE CHECK_SEA
+!
+!-------------------------------------------------------------------------------
+!
+END SUBROUTINE PUT_SFX_SEA
diff --git a/src/ARCH_SRC/CPL_WAVE/SURFEX/put_sfx_wave.F90 b/src/ARCH_SRC/CPL_WAVE/SURFEX/put_sfx_wave.F90
new file mode 100755
index 0000000000000000000000000000000000000000..5b63f5948b50303b06b06207a8c766ad280d4a2c
--- /dev/null
+++ b/src/ARCH_SRC/CPL_WAVE/SURFEX/put_sfx_wave.F90
@@ -0,0 +1,175 @@
+!SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence
+!SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!SFX_LIC for details. version 1.
+!     #########
+      SUBROUTINE PUT_SFX_WAVE(S, U, &
+                              KLUOUT,PWAVE_CHA,PWAVE_UCU,PWAVE_VCU,PWAVE_HS,PWAVE_TP)
+!     ####################################################
+!
+!!****  *PUT_SFX_WAVE* - routine to put some variables from
+!!                       a wave model
+!!    PURPOSE
+!!    -------
+!!
+!!**  METHOD
+!!    ------
+!!
+!!    EXTERNAL
+!!    --------
+!!
+!!
+!!    IMPLICIT ARGUMENTS
+!!    ------------------
+!!
+!!    REFERENCE
+!!    ---------
+!!
+!!
+!!    AUTHOR
+!!    ------
+!!	J. Pianezze      *LPO*	
+!!
+!!    MODIFICATIONS
+!!    -------------
+!!      Original    09/2014
+!-------------------------------------------------------------------------------
+!
+!*       0.    DECLARATIONS
+!              ------------
+!
+!
+USE MODD_SEAFLUX_n, ONLY : SEAFLUX_t
+USE MODD_SURF_ATM_n, ONLY : SURF_ATM_t
+!
+USE MODD_SURF_PAR,   ONLY : NUNDEF, XUNDEF
+USE MODD_SFX_OASIS
+!
+USE MODI_PACK_SAME_RANK
+USE MODI_ABOR1_SFX
+!
+USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
+USE PARKIND1  ,ONLY : JPRB
+!
+IMPLICIT NONE
+!
+!*       0.1   Declarations of arguments
+!              -------------------------
+!
+!
+TYPE(SEAFLUX_t), INTENT(INOUT) :: S
+TYPE(SURF_ATM_t), INTENT(INOUT) :: U
+!
+INTEGER,           INTENT(IN)  :: KLUOUT
+!
+REAL, DIMENSION(:), INTENT(IN) :: PWAVE_CHA
+REAL, DIMENSION(:), INTENT(IN) :: PWAVE_UCU
+REAL, DIMENSION(:), INTENT(IN) :: PWAVE_VCU
+REAL, DIMENSION(:), INTENT(IN) :: PWAVE_HS
+REAL, DIMENSION(:), INTENT(IN) :: PWAVE_TP
+!
+!*       0.2   Declarations of local variables
+!              -------------------------------
+!
+!
+CHARACTER(LEN=50)     :: YCOMMENT
+!
+REAL(KIND=JPRB) :: ZHOOK_HANDLE
+!
+!-------------------------------------------------------------------------------
+!
+IF (LHOOK) CALL DR_HOOK('PUT_SFX_WAVE',0,ZHOOK_HANDLE)
+!
+!*       1.0   Initialization
+!              --------------
+!
+!
+!*       2.0   Get variable over wave
+!              ---------------------
+!
+IF(U%NSIZE_SEA>0)THEN
+! 
+  CALL TREAT_WAVE(U%NSIZE_SEA)
+!
+ENDIF
+!
+IF (LHOOK) CALL DR_HOOK('PUT_SFX_WAVE',1,ZHOOK_HANDLE)
+!
+!-------------------------------------------------------------------------------
+CONTAINS
+!-------------------------------------------------------------------------------
+!
+SUBROUTINE TREAT_WAVE(KLU)
+!
+USE MODI_PACK_SAME_RANK
+!
+IMPLICIT NONE
+!
+INTEGER,     INTENT(IN) :: KLU
+!
+CHARACTER(LEN=50)       :: YCOMMENT
+!
+REAL(KIND=JPRB) :: ZHOOK_HANDLE
+!
+IF (LHOOK) CALL DR_HOOK('PUT_SFX_WAVE:TREAT_WAVE',0,ZHOOK_HANDLE)
+!
+IF(NWAVE_CHA_ID/=NUNDEF)THEN
+  YCOMMENT='Charnock coefficient'
+  CALL PACK_SAME_RANK(U%NR_SEA(:),PWAVE_CHA(:),S%XCHARN(:))
+  CALL CHECK_WAVE(YCOMMENT,S%XCHARN(:))
+ENDIF
+!
+IF(NWAVE_UCU_ID/=NUNDEF)THEN
+  YCOMMENT='u-current velocity'
+  CALL PACK_SAME_RANK(U%NR_SEA(:),PWAVE_UCU(:),S%XUMER(:))
+  CALL CHECK_WAVE(YCOMMENT,S%XUMER(:))
+ENDIF
+!
+IF(NWAVE_VCU_ID/=NUNDEF)THEN
+  YCOMMENT='v-current velocity'
+  CALL PACK_SAME_RANK(U%NR_SEA(:),PWAVE_VCU(:),S%XVMER(:))
+  CALL CHECK_WAVE(YCOMMENT,S%XVMER(:))
+ENDIF
+!
+IF(NWAVE_HS_ID/=NUNDEF)THEN
+  YCOMMENT='Significant wave height'
+  CALL PACK_SAME_RANK(U%NR_SEA(:),PWAVE_HS(:),S%XHS(:))
+  CALL CHECK_WAVE(YCOMMENT,S%XHS(:))
+ENDIF
+!
+IF(NWAVE_TP_ID/=NUNDEF)THEN
+  YCOMMENT='Peak period'
+  CALL PACK_SAME_RANK(U%NR_SEA(:),PWAVE_TP(:),S%XTP(:))
+  CALL CHECK_WAVE(YCOMMENT,S%XTP(:))
+ENDIF
+!
+IF (LHOOK) CALL DR_HOOK('PUT_SFX_WAVE:TREAT_WAVE',1,ZHOOK_HANDLE)
+!
+END SUBROUTINE TREAT_WAVE
+!
+!-------------------------------------------------------------------------------
+!
+SUBROUTINE CHECK_WAVE(HCOMMENT,PFIELD)
+!
+IMPLICIT NONE
+!
+CHARACTER(LEN=*),   INTENT(IN) :: HCOMMENT
+REAL, DIMENSION(:), INTENT(IN) :: PFIELD
+!
+REAL(KIND=JPRB) :: ZHOOK_HANDLE
+!
+IF (LHOOK) CALL DR_HOOK('PUT_SFX_WAVE:CHECK_WAVE',0,ZHOOK_HANDLE)
+!
+IF(ANY(PFIELD(:)>=XUNDEF))THEN
+  WRITE(KLUOUT,*)'PUT_SFX_WAVE: problem after get '//TRIM(HCOMMENT)//' from OASIS'
+  WRITE(KLUOUT,*)'PUT_SFX_WAVE: some points not defined = ',COUNT(PFIELD(:)>=XUNDEF)
+  CALL ABOR1_SFX('PUT_SFX_WAVE: problem after get '//TRIM(HCOMMENT)//' from OASIS')
+ENDIF
+!
+IF (LHOOK) CALL DR_HOOK('PUT_SFX_WAVE:CHECK_WAVE',1,ZHOOK_HANDLE)
+!
+END SUBROUTINE CHECK_WAVE
+!
+!-------------------------------------------------------------------------------
+!
+END SUBROUTINE PUT_SFX_WAVE
diff --git a/src/ARCH_SRC/CPL_WAVE/SURFEX/put_sfxcpln.F90 b/src/ARCH_SRC/CPL_WAVE/SURFEX/put_sfxcpln.F90
new file mode 100644
index 0000000000000000000000000000000000000000..32a3cabc22a39dd12711ca9e6afb66b523cf682e
--- /dev/null
+++ b/src/ARCH_SRC/CPL_WAVE/SURFEX/put_sfxcpln.F90
@@ -0,0 +1,195 @@
+!SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence
+!SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!SFX_LIC for details. version 1.
+!     #########
+SUBROUTINE PUT_SFXCPL_n (F, I, S, U, W, &
+                         HPROGRAM,KI,KSW,PSW_BANDS,PZENITH, &
+                         PLAND_WTD,PLAND_FWTD,PLAND_FFLOOD, &
+                         PLAND_PIFLOOD,PSEA_SST,PSEA_UCU,   &
+                         PSEA_VCU,PSEAICE_SIT,PSEAICE_CVR,  &
+                         PSEAICE_ALB,PTSRAD,                &
+                         PDIR_ALB,PSCA_ALB,PEMIS,PTSURF,    & 
+                         PWAVE_CHA,PWAVE_UCU,PWAVE_VCU,      &
+                         PWAVE_HS,PWAVE_TP                   )
+!     #################################################################################################
+!
+!!****  *PUT_SFXCPL_n* - routine to modify some variables in surfex from information coming
+!                        from an ocean and/or a river routing model (but already on Surfex grid)
+!
+!
+!!    PURPOSE
+!!    -------
+!!
+!!**  METHOD
+!!    ------
+!!
+!!    EXTERNAL
+!!    --------
+!!
+!!
+!!    IMPLICIT ARGUMENTS
+!!    ------------------
+!!
+!!    REFERENCE
+!!    ---------
+!!
+!!
+!!    AUTHOR
+!!    ------
+!!      B. Decharme      *Meteo France*
+!!
+!!    MODIFICATIONS
+!!    -------------
+!!      Original    08/2009
+!!      Modified       11/2014 : J. Pianezze - add wave coupling parameters
+!-------------------------------------------------------------------------------
+!
+!*       0.    DECLARATIONS
+!              ------------
+!
+!
+!
+!
+!
+!
+!
+USE MODD_FLAKE_n, ONLY : FLAKE_t
+USE MODD_ISBA_n, ONLY : ISBA_t
+USE MODD_SEAFLUX_n, ONLY : SEAFLUX_t
+USE MODD_SURF_ATM_n, ONLY : SURF_ATM_t
+USE MODD_WATFLUX_n, ONLY : WATFLUX_t
+!
+USE MODD_SURF_PAR,   ONLY : XUNDEF
+!
+USE MODN_SFX_OASIS,  ONLY : LWATER
+USE MODD_SFX_OASIS,  ONLY : LCPL_SEA, LCPL_SEAICE, &
+                            LCPL_LAND, LCPL_GW,    &
+                            LCPL_FLOOD, LCPL_WAVE
+!                          
+USE MODI_GET_LUOUT
+!
+USE MODI_ABOR1_SFX
+USE MODI_PUT_SFX_LAND
+USE MODI_PUT_SFX_SEA
+USE MODI_PUT_SFX_WAVE
+USE MODI_UPDATE_ESM_SURF_ATM_n
+!
+USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
+USE PARKIND1  ,ONLY : JPRB
+!
+IMPLICIT NONE
+!
+!*       0.1   Declarations of arguments
+!              -------------------------
+!
+!
+TYPE(FLAKE_t), INTENT(INOUT) :: F
+TYPE(ISBA_t), INTENT(INOUT) :: I
+TYPE(SEAFLUX_t), INTENT(INOUT) :: S
+TYPE(SURF_ATM_t), INTENT(INOUT) :: U
+TYPE(WATFLUX_t), INTENT(INOUT) :: W
+!
+ CHARACTER(LEN=6),        INTENT(IN)  :: HPROGRAM
+INTEGER,                 INTENT(IN)  :: KI      ! number of points
+INTEGER,                 INTENT(IN)  :: KSW     ! number of bands
+!
+REAL, DIMENSION(KI),      INTENT(IN) :: PZENITH
+REAL, DIMENSION(KSW),     INTENT(IN) :: PSW_BANDS ! mean wavelength of each shortwave band (m)
+!
+REAL, DIMENSION(KI),      INTENT(IN) :: PLAND_WTD     ! Land water table depth (m)
+REAL, DIMENSION(KI),      INTENT(IN) :: PLAND_FWTD    ! Land grid-cell fraction of water table rise (-)
+REAL, DIMENSION(KI),      INTENT(IN) :: PLAND_FFLOOD  ! Land Floodplains fraction (-)
+REAL, DIMENSION(KI),      INTENT(IN) :: PLAND_PIFLOOD ! Land Potential flood infiltration (kg/m2)
+!
+REAL, DIMENSION(KI),      INTENT(IN) :: PSEA_SST ! Sea surface temperature (K)
+REAL, DIMENSION(KI),      INTENT(IN) :: PSEA_UCU ! Sea u-current stress (Pa)
+REAL, DIMENSION(KI),      INTENT(IN) :: PSEA_VCU ! Sea v-current stress (Pa)
+!
+REAL, DIMENSION(KI),      INTENT(IN) :: PSEAICE_SIT ! Sea-ice Temperature (K)
+REAL, DIMENSION(KI),      INTENT(IN) :: PSEAICE_CVR ! Sea-ice cover (-)
+REAL, DIMENSION(KI),      INTENT(IN) :: PSEAICE_ALB ! Sea-ice albedo (-)
+!
+REAL, DIMENSION(KI),      INTENT(IN) :: PWAVE_CHA ! Charnock coefficient (-)
+REAL, DIMENSION(KI),      INTENT(IN) :: PWAVE_UCU ! u-current velocity   (m/s)
+REAL, DIMENSION(KI),      INTENT(IN) :: PWAVE_VCU ! v-current velocity   (m/s)
+REAL, DIMENSION(KI),      INTENT(IN) :: PWAVE_HS  ! Significant wave height (m)
+REAL, DIMENSION(KI),      INTENT(IN) :: PWAVE_TP  ! Peak period (s)
+!
+REAL, DIMENSION(KI),     INTENT(OUT) :: PTSRAD   ! Total radiative temperature see by the atmosphere
+REAL, DIMENSION(KI),     INTENT(OUT) :: PTSURF   ! Total surface temperature see by the atmosphere
+REAL, DIMENSION(KI),     INTENT(OUT) :: PEMIS    ! Total emissivity see by the atmosphere
+REAL, DIMENSION(KI,KSW), INTENT(OUT) :: PDIR_ALB ! Total direct albedo see by the atmosphere
+REAL, DIMENSION(KI,KSW), INTENT(OUT) :: PSCA_ALB ! Total diffus albedo see by the atmosphere
+!
+!
+!*       0.2   Declarations of local variables
+!              -------------------------------
+!
+!
+INTEGER :: ILU, ILUOUT
+REAL(KIND=JPRB) :: ZHOOK_HANDLE
+!
+!-------------------------------------------------------------------------------
+IF (LHOOK) CALL DR_HOOK('PUT_SFXCL_N',0,ZHOOK_HANDLE)
+!
+CALL GET_LUOUT(HPROGRAM,ILUOUT)
+!-------------------------------------------------------------------------------
+!
+! Global argument
+!
+IF(KI/=U%NSIZE_FULL)THEN
+  WRITE(ILUOUT,*) 'size of field from the coupler :', KI
+  WRITE(ILUOUT,*) 'size of field in SURFEX        :', U%NSIZE_FULL
+  CALL ABOR1_SFX('PUT_SFXCPL_N: VECTOR SIZE NOT CORRECT FOR COUPLING')
+ENDIF
+!
+!-------------------------------------------------------------------------------
+! Put variable over land tile
+!-------------------------------------------------------------------------------
+!
+IF(LCPL_LAND)THEN
+  CALL PUT_SFX_LAND(I, U, &
+                    ILUOUT,LCPL_GW,LCPL_FLOOD,PLAND_WTD(:),       &
+                    PLAND_FWTD(:),PLAND_FFLOOD(:),PLAND_PIFLOOD(:))        
+ENDIF
+!
+!-------------------------------------------------------------------------------
+! Put variable over sea and/or water tile
+!-------------------------------------------------------------------------------
+!
+IF(LCPL_SEA)THEN
+!
+  CALL PUT_SFX_SEA(S, U, W, &
+                   ILUOUT,LCPL_SEAICE,LWATER,PSEA_SST(:),PSEA_UCU(:),       &
+                   PSEA_VCU(:),PSEAICE_SIT(:),PSEAICE_CVR(:),PSEAICE_ALB(:) )
+!
+ENDIF
+!
+!-------------------------------------------------------------------------------
+! Put variable over sea and/or water tile for waves
+!-------------------------------------------------------------------------------
+!
+IF(LCPL_WAVE)THEN
+!
+  CALL PUT_SFX_WAVE(S, U, &
+                    ILUOUT,PWAVE_CHA(:),PWAVE_UCU(:),PWAVE_VCU(:),PWAVE_HS(:),PWAVE_TP(:) )
+!
+ENDIF
+!
+!-------------------------------------------------------------------------------
+! Update radiative properties at time t+1 for radiative scheme
+!-------------------------------------------------------------------------------
+!
+IF(LCPL_SEA.OR.LCPL_FLOOD)THEN
+  CALL UPDATE_ESM_SURF_ATM_n(F, I, S, U, W, &
+                             HPROGRAM, KI, KSW, PZENITH, PSW_BANDS,    &
+                             PTSRAD, PDIR_ALB, PSCA_ALB, PEMIS, PTSURF )
+ENDIF
+!
+!-------------------------------------------------------------------------------
+!
+IF (LHOOK) CALL DR_HOOK('PUT_SFXCL_N',1,ZHOOK_HANDLE)
+!
+!
+END SUBROUTINE PUT_SFXCPL_n
diff --git a/src/ARCH_SRC/CPL_WAVE/SURFEX/read_lcover.F90 b/src/ARCH_SRC/CPL_WAVE/SURFEX/read_lcover.F90
new file mode 100644
index 0000000000000000000000000000000000000000..6855dbefa151938646e7f1bd3c8010fb434a2689
--- /dev/null
+++ b/src/ARCH_SRC/CPL_WAVE/SURFEX/read_lcover.F90
@@ -0,0 +1,113 @@
+!SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence
+!SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!SFX_LIC for details. version 1.
+!     #########
+      SUBROUTINE READ_LCOVER (&
+                              HPROGRAM,OCOVER)
+!     ################################
+!
+!!****  *READ_LCOVER* - routine to read a file for
+!!                         physiographic data file of model _n 
+!!
+!!    PURPOSE
+!!    -------
+!!       The purpose of this routine is to initialise the list of covers
+!!
+!!
+!!**  METHOD
+!!    ------
+!!
+!!    EXTERNAL
+!!    --------
+!!      
+!!
+!!
+!!    IMPLICIT ARGUMENTS
+!!    ------------------
+!!
+!!    REFERENCE
+!!    ---------
+!!
+!!
+!!    AUTHOR
+!!    ------
+!!      V. Masson   *Meteo France*
+!!
+!!    MODIFICATIONS
+!!    -------------
+!!      Original    10/2008
+!!      M. Moge     02/2015 parallelization
+!!      J. Pianezze 08/2016 replacement of MPI_COMM_WOLRD by NMNH_COMM_WORLD
+!-------------------------------------------------------------------------------
+!
+!*       0.    DECLARATIONS
+!              ------------
+!
+#ifdef MNH_PARALLEL
+USE MODD_VAR_ll, ONLY : NMNH_COMM_WORLD
+#endif
+!
+USE MODD_DATA_COVER_PAR, ONLY : JPCOVER
+!
+USE MODI_READ_SURF
+USE MODI_OLD_NAME
+!
+USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
+USE PARKIND1  ,ONLY : JPRB
+!
+IMPLICIT NONE
+#ifndef NOMPI
+INCLUDE "mpif.h"
+#endif
+!
+!*       0.1   Declarations of arguments
+!              -------------------------
+!
+!
+!
+ CHARACTER(LEN=6),  INTENT(IN)  :: HPROGRAM ! calling program
+LOGICAL, DIMENSION(JPCOVER)    :: OCOVER   ! list of covers
+!
+!*       0.2   Declarations of local variables
+!              -------------------------------
+!
+INTEGER           :: IRESP          ! Error code after redding
+ CHARACTER(LEN=12) :: YRECFM         ! Name of the article to be read
+INTEGER           :: IVERSION       ! version of surfex file being read
+LOGICAL, DIMENSION(:), ALLOCATABLE :: GCOVER ! cover list in the file
+REAL(KIND=JPRB) :: ZHOOK_HANDLE
+INTEGER   :: IINFO
+!-------------------------------------------------------------------------------
+!
+!
+!* ascendant compatibility
+IF (LHOOK) CALL DR_HOOK('READ_LCOVER',0,ZHOOK_HANDLE)
+YRECFM='VERSION'
+ CALL READ_SURF(&
+                HPROGRAM,YRECFM,IVERSION,IRESP)
+IF (IVERSION<=3) THEN
+  ALLOCATE(GCOVER(255))
+ELSE
+  ALLOCATE(GCOVER(JPCOVER))
+END IF
+ CALL OLD_NAME(&
+               HPROGRAM,'COVER_LIST      ',YRECFM)
+ CALL READ_SURF(&
+                HPROGRAM,YRECFM,GCOVER(:),IRESP,HDIR='-')
+!
+OCOVER=.FALSE.
+OCOVER(:SIZE(GCOVER))=GCOVER(:)
+#ifndef NOMPI
+#ifdef MNH_PARALLEL
+CALL MPI_ALLREDUCE(GCOVER, OCOVER, SIZE(GCOVER),MPI_LOGICAL, MPI_LOR, NMNH_COMM_WORLD, IINFO)
+#else
+CALL MPI_ALLREDUCE(GCOVER, OCOVER, SIZE(GCOVER),MPI_LOGICAL, MPI_LOR, MPI_COMM_WORLD, IINFO)
+#endif
+#endif
+DEALLOCATE(GCOVER)
+IF (LHOOK) CALL DR_HOOK('READ_LCOVER',1,ZHOOK_HANDLE)
+!
+!-------------------------------------------------------------------------------
+!
+END SUBROUTINE READ_LCOVER
diff --git a/src/ARCH_SRC/CPL_WAVE/SURFEX/read_nam_prep_seafluxn.F90 b/src/ARCH_SRC/CPL_WAVE/SURFEX/read_nam_prep_seafluxn.F90
new file mode 100644
index 0000000000000000000000000000000000000000..0249c23c120db5085f6577b16e11209405fa0ba6
--- /dev/null
+++ b/src/ARCH_SRC/CPL_WAVE/SURFEX/read_nam_prep_seafluxn.F90
@@ -0,0 +1,64 @@
+!SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence
+!SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!SFX_LIC for details. version 1.
+!     #########
+SUBROUTINE READ_NAM_PREP_SEAFLUX_n(HPROGRAM)
+!     #######################################################
+!
+!!      Modified    03/2014 : M.N. Bouin  ! possibility of wave parameters
+!!                                        ! from external source
+!---------------------------------------
+!
+USE MODD_SURF_PAR, ONLY : XUNDEF, NUNDEF
+USE MODN_PREP_SEAFLUX
+
+USE MODI_DEFAULT_PREP_SEAFLUX
+!
+USE MODI_TEST_NAM_VAR_SURF
+USE MODI_GET_LUOUT
+USE MODI_OPEN_NAMELIST
+USE MODI_CLOSE_NAMELIST
+USE MODE_POS_SURF
+!
+!
+USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
+USE PARKIND1  ,ONLY : JPRB
+!
+IMPLICIT NONE
+!
+ CHARACTER(LEN=6),   INTENT(IN)  :: HPROGRAM  ! program calling surf. schemes
+!
+INTEGER :: ILUNAM         ! logical unit of namelist file
+INTEGER :: ILUOUT
+LOGICAL :: GFOUND         ! Return code when searching namelist
+REAL(KIND=JPRB) :: ZHOOK_HANDLE
+!
+!---------------------------------------
+!
+IF (LHOOK) CALL DR_HOOK('READ_NAM_PREP_SEAFLUX_N',0,ZHOOK_HANDLE)
+NYEAR=NUNDEF
+NMONTH=NUNDEF
+NDAY=NUNDEF
+XTIME=XUNDEF
+!
+ CALL GET_LUOUT(HPROGRAM,ILUOUT)
+!
+ CALL DEFAULT_PREP_SEAFLUX
+!
+ CALL OPEN_NAMELIST(HPROGRAM,ILUNAM)
+ CALL POSNAM(ILUNAM,'NAM_PREP_SEAFLUX',GFOUND,ILUOUT)
+IF (GFOUND) READ(UNIT=ILUNAM,NML=NAM_PREP_SEAFLUX)
+ CALL CLOSE_NAMELIST(HPROGRAM,ILUNAM)
+!
+ CALL TEST_NAM_VAR_SURF(ILUOUT,'CTYPE_SEAFLX',   CTYPE_SEAFLX,   '      ','GRIB  ','MESONH',&
+                          'ASCII ','NETCDF','LFI   ','FA    ')   
+ CALL TEST_NAM_VAR_SURF(ILUOUT,'CTYPEPGD',   CTYPEPGD,   '      ','GRIB  ','MESONH','ASCII ','LFI   ','FA    ')
+ CALL TEST_NAM_VAR_SURF(ILUOUT,'CSEAICE_SCHEME',CSEAICE_SCHEME,'GELATO','NONE  ')
+ CALL TEST_NAM_VAR_SURF(ILUOUT,'CTYPEWAVE', CTYPEWAVE, '      ','GRIB  ','MESONH','ASCII ',&
+                          'NETCDF','LFI   ')
+! 
+IF (LHOOK) CALL DR_HOOK('READ_NAM_PREP_SEAFLUX_N',1,ZHOOK_HANDLE)
+!------------------------------------
+!
+END SUBROUTINE READ_NAM_PREP_SEAFLUX_n
diff --git a/src/ARCH_SRC/CPL_WAVE/SURFEX/read_namelists_seafluxn.F90 b/src/ARCH_SRC/CPL_WAVE/SURFEX/read_namelists_seafluxn.F90
new file mode 100644
index 0000000000000000000000000000000000000000..b781df3afd5d510f2b9dd41cd0faf8c1a3e0bcb5
--- /dev/null
+++ b/src/ARCH_SRC/CPL_WAVE/SURFEX/read_namelists_seafluxn.F90
@@ -0,0 +1,71 @@
+!SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence
+!SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!SFX_LIC for details. version 1.
+!     #########
+SUBROUTINE READ_NAMELISTS_SEAFLUX_n (SM, &
+                                     HPROGRAM,HINIT)
+!     #######################################################
+!
+!!      Modified    03/2014 : M.N. Bouin  ! possibility of wave parameters
+!!                                        ! from external source
+!---------------------------------------------------------------------------   
+!
+!
+!
+USE MODD_SURFEX_n, ONLY : SEAFLUX_MODEL_t
+!
+USE MODN_SEAFLUX_n
+!
+USE MODI_DEFAULT_SEAFLUX
+USE MODI_DEFAULT_CH_DEP
+USE MODI_DEFAULT_DIAG_SEAFLUX
+USE MODI_READ_DEFAULT_SEAFLUX_n
+USE MODI_DEFAULT_SEAICE
+USE MODI_READ_SEAFLUX_CONF_n
+!
+USE MODI_READ_NAM_PREP_SEAFLUX_n
+!
+!
+USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
+USE PARKIND1  ,ONLY : JPRB
+!
+IMPLICIT NONE
+!
+!
+TYPE(SEAFLUX_MODEL_t), INTENT(INOUT) :: SM
+!
+ CHARACTER(LEN=6),   INTENT(IN)  :: HPROGRAM  ! program calling surf. schemes
+ CHARACTER(LEN=3),   INTENT(IN)  :: HINIT     ! choice of fields to initialize
+REAL(KIND=JPRB) :: ZHOOK_HANDLE
+!
+!---------------------------------------------------------------
+!
+IF (LHOOK) CALL DR_HOOK('READ_NAMELISTS_SEAFLUX_N',0,ZHOOK_HANDLE)
+!
+ CALL DEFAULT_SEAFLUX(XTSTEP,XOUT_TSTEP,CSEA_ALB,CSEA_FLUX,LPWG,         &
+                     LPRECIP,LPWEBB,NZ0,NGRVWAVES,LPROGSST,           &
+                     NTIME_COUPLING,XOCEAN_TSTEP,XICHCE,CINTERPOL_SST,&
+                     CINTERPOL_SSS,LWAVEWIND)
+ CALL DEFAULT_SEAICE(HPROGRAM, CINTERPOL_SIC, CINTERPOL_SIT,             &
+                    XFREEZING_SST,XSEAICE_TSTEP, XSIC_EFOLDING_TIME,    &
+                    XSIT_EFOLDING_TIME, XCD_ICE_CST, XSI_FLX_DRV        )     
+!               
+ CALL DEFAULT_CH_DEP(CCH_DRY_DEP)
+!
+ CALL DEFAULT_DIAG_SEAFLUX(N2M,LSURF_BUDGET,L2M_MIN_ZS,LRAD_BUDGET,LCOEF,LSURF_VARS,&
+                          LDIAG_OCEAN,LDIAG_SEAICE,LSURF_BUDGETC,LRESET_BUDGETC,XDIAG_TSTEP)  
+!
+ CALL READ_DEFAULT_SEAFLUX_n(SM%CHS, SM%DGO, SM%DGS, SM%DGSI, SM%O, SM%S, &
+                            HPROGRAM)
+!
+ CALL READ_SEAFLUX_CONF_n(SM%CHS, SM%DGO, SM%DGS, SM%DGSI, SM%O, SM%S, &
+                         HPROGRAM)
+!
+IF (HINIT=='PRE') CALL READ_NAM_PREP_SEAFLUX_n(HPROGRAM)
+!
+IF (LHOOK) CALL DR_HOOK('READ_NAMELISTS_SEAFLUX_N',1,ZHOOK_HANDLE)
+!
+!---------------------------------------------------------------------------
+!
+END SUBROUTINE READ_NAMELISTS_SEAFLUX_n
diff --git a/src/ARCH_SRC/CPL_WAVE/SURFEX/read_prep_seaflux_conf.F90 b/src/ARCH_SRC/CPL_WAVE/SURFEX/read_prep_seaflux_conf.F90
new file mode 100644
index 0000000000000000000000000000000000000000..ec33a3379a8c859b38c08f5c3fe81bae284b83ed
--- /dev/null
+++ b/src/ARCH_SRC/CPL_WAVE/SURFEX/read_prep_seaflux_conf.F90
@@ -0,0 +1,202 @@
+!SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence
+!SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!SFX_LIC for details. version 1.
+!     #########
+      SUBROUTINE READ_PREP_SEAFLUX_CONF (O, &
+                                         HPROGRAM,HVAR,HFILE,HFILETYPE,HFILEPGD,HFILEPGDTYPE, &
+                                        HATMFILE,HATMFILETYPE,HPGDFILE,HPGDFILETYPE,KLUOUT,OUNIF)
+!     #######################################################
+!
+!!****  *READ_PREP_SEAFLUX_CONF* - routine to read the configuration for 
+!!                                 SEAFLUX fields preparation
+!!
+!!    PURPOSE
+!!    -------
+!!
+!!**  METHOD
+!!    ------
+!!
+!!    EXTERNAL
+!!    --------
+!!
+!!
+!!    IMPLICIT ARGUMENTS
+!!    ------------------
+!!
+!!    REFERENCE
+!!    ---------
+!!
+!!
+!!    AUTHOR
+!!    ------
+!!      S. Malardel   *Meteo France*
+!!
+!!    MODIFICATIONS
+!!    -------------
+!!      Original    01/2004 
+!!      P. Le Moigne 10/2005, Phasage Arome
+!!      C. Lebeaupin 01/2008  Add oceanic variables initialization
+!!      Modified     09/2013  S. Senesi : introduce variables for sea-ice scheme 
+!!      Modified    03/2014 : M.N. Bouin  ! possibility of wave parameters
+!!                                        ! from external source
+!-------------------------------------------------------------------------------
+!
+!*       0.    DECLARATIONS
+!              ------------
+!
+!
+USE MODD_OCEAN_n, ONLY : OCEAN_t
+!
+USE MODN_PREP_SEAFLUX
+!
+USE MODI_READ_PREP_SURF_ATM_CONF
+USE MODI_PREP_OCEAN_MERCATORVERGRID
+!
+USE MODD_PREP_SEAFLUX, ONLY : CFILE_SEAFLX, CTYPE_SEAFLX, CFILEPGD_SEAFLX, CTYPEPGD, &
+                              CFILEWAVE_SEAFLX, CTYPEWAVE,                           &
+                              XSST_UNIF, XSSS_UNIF, XSIC_UNIF
+!
+USE MODD_SURF_PAR,   ONLY : XUNDEF
+!
+!
+USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
+USE PARKIND1  ,ONLY : JPRB
+!
+USE MODI_ABOR1_SFX
+!
+IMPLICIT NONE
+!
+!*       0.1   Declarations of arguments
+!              -------------------------
+!
+!
+TYPE(OCEAN_t), INTENT(INOUT) :: O
+!
+ CHARACTER(LEN=6),  INTENT(IN)  :: HPROGRAM ! program calling ISBA
+ CHARACTER(LEN=7),  INTENT(IN)  :: HVAR     ! variable treated
+ CHARACTER(LEN=28), INTENT(OUT) :: HFILE    ! file name
+ CHARACTER(LEN=6),  INTENT(OUT) :: HFILETYPE! file type
+ CHARACTER(LEN=28), INTENT(OUT) :: HFILEPGD    ! file name
+ CHARACTER(LEN=6),  INTENT(OUT) :: HFILEPGDTYPE! file type
+ CHARACTER(LEN=28), INTENT(IN)  :: HATMFILE    ! atmospheric file name
+ CHARACTER(LEN=6),  INTENT(IN)  :: HATMFILETYPE! atmospheric file type
+ CHARACTER(LEN=28), INTENT(IN)  :: HPGDFILE    ! atmospheric file name
+ CHARACTER(LEN=6),  INTENT(IN)  :: HPGDFILETYPE! atmospheric file type
+INTEGER,           INTENT(IN)  :: KLUOUT   ! logical unit of output listing
+LOGICAL,           INTENT(OUT) :: OUNIF    ! flag for prescribed uniform field
+
+!
+!*       0.2   Declarations of local variables
+!              -------------------------------
+!
+INTEGER           :: IRESP          ! IRESP  : return-code if a problem appears 
+                                    ! at the open of the file in LFI  routines 
+INTEGER           :: ILUNAM         ! Logical unit of namelist file
+!
+ CHARACTER(LEN=28) :: YNAMELIST      ! namelist file
+!
+LOGICAL           :: GFOUND         ! Return code when searching namelist
+REAL(KIND=JPRB) :: ZHOOK_HANDLE
+!-------------------------------------------------------------------------------
+!
+!
+IF (LHOOK) CALL DR_HOOK('READ_PREP_SEAFLUX_CONF',0,ZHOOK_HANDLE)
+HFILE = '                         '
+HFILETYPE = '      '
+!
+HFILEPGD = '                            '
+HFILEPGDTYPE = '      '
+!
+OUNIF     = .FALSE.
+!
+!-------------------------------------------------------------------------------
+!
+!* Select seaflux files if they are defined
+!  -----------------------------------------
+!
+IF (HVAR .EQ. 'HS     ' .OR. HVAR .EQ. 'TP     ') THEN
+  IF (LEN_TRIM(HFILE)==0 .AND. LEN_TRIM(CFILEWAVE_SEAFLX)>0 .AND. LEN_TRIM(CTYPEWAVE)>0) THEN
+    HFILE     = CFILEWAVE_SEAFLX
+    HFILETYPE = CTYPEWAVE
+  END IF
+ELSE
+  IF (LEN_TRIM(HFILE)==0 .AND. LEN_TRIM(CFILE_SEAFLX)>0 .AND. LEN_TRIM(CTYPE_SEAFLX)>0) THEN
+    HFILE     = CFILE_SEAFLX
+    HFILETYPE = CTYPE_SEAFLX
+  END IF
+END IF
+!
+IF (LEN_TRIM(HFILEPGD)==0 .AND. LEN_TRIM(CFILEPGD_SEAFLX)>0 .AND. LEN_TRIM(CTYPEPGD)>0) THEN
+  HFILEPGD     = CFILEPGD_SEAFLX
+  HFILEPGDTYPE = CTYPEPGD
+END IF
+!
+!! If no file name in the scheme namelist,
+!! try to find a name in NAM_SURF_ATM
+!
+IF (LEN_TRIM(HFILE)==0) THEN
+!
+ CALL READ_PREP_SURF_ATM_CONF(HPROGRAM,HFILE,HFILETYPE,HFILEPGD,HFILEPGDTYPE,&
+                             HATMFILE,HATMFILETYPE,HPGDFILE,HPGDFILETYPE,KLUOUT)
+!
+END IF
+!-------------------------------------------------------------------------------
+!
+!* Is an uniform field prescribed?
+!  ------------------------------
+!
+SELECT CASE (HVAR)
+   CASE ('SST    ') 
+      OUNIF = (XSST_UNIF/=XUNDEF) 
+   CASE ('SSS    ') 
+      IF (CSEAICE_SCHEME == 'NONE  '.AND. &
+         LEN_TRIM(HFILETYPE)==0.0   .AND. &
+         XSSS_UNIF==XUNDEF                )THEN
+         XSSS_UNIF=0.0
+      ENDIF
+      OUNIF = (XSSS_UNIF/=XUNDEF)
+   CASE ('SIC    ') 
+      OUNIF = (XSIC_UNIF/=XUNDEF) 
+END SELECT
+
+!
+!-------------------------------------------------------------------------------
+!
+!* If no file and no uniform field is prescribed: error
+!  ---------------------------------------------
+!
+IF (HVAR=='DATE   ' .OR. HVAR=='ZS     ') THEN
+  OUNIF = (HFILETYPE=='      ')
+  IF (LHOOK) CALL DR_HOOK('READ_PREP_SEAFLUX_CONF',1,ZHOOK_HANDLE)
+  RETURN
+END IF
+!-------------------------------------------------------------------------------
+!
+!* If no file and var == wave: uniform field
+!  ---------------------------------------------
+IF (HVAR=='HS    ' .OR. HVAR=='TP    ') THEN
+  OUNIF = (HFILETYPE/='NETCDF')
+  IF (LHOOK) CALL DR_HOOK('READ_PREP_SEAFLUX_CONF',1,ZHOOK_HANDLE)
+  RETURN
+END IF
+!-------------------------------------------------------------------------------
+!
+IF (LEN_TRIM(HFILETYPE)==0 .AND. .NOT. OUNIF) THEN
+   CALL ABOR1_SFX('READ_PREP_SEAFLUX_CONF: AN INPUT VALUE IS REQUIRED FOR '//HVAR)
+END IF
+!
+!-------------------------------------------------------------------------------
+!
+!* If 1D coupling: ocean variables initializing
+!  --------------------------------------------
+!
+IF (O%LMERCATOR) THEN
+  WRITE(KLUOUT,*) 'LMERCATOR=T : initializing oceanic vertical grid'
+  CALL PREP_OCEAN_MERCATORVERGRID(HPROGRAM,OUNIF)
+END IF
+IF (LHOOK) CALL DR_HOOK('READ_PREP_SEAFLUX_CONF',1,ZHOOK_HANDLE)
+!
+!-------------------------------------------------------------------------------
+!
+END SUBROUTINE READ_PREP_SEAFLUX_CONF
diff --git a/src/ARCH_SRC/CPL_WAVE/SURFEX/read_seafluxn.F90 b/src/ARCH_SRC/CPL_WAVE/SURFEX/read_seafluxn.F90
new file mode 100644
index 0000000000000000000000000000000000000000..c65ac933c74c4c47d5e14991da10981b6a0c53e8
--- /dev/null
+++ b/src/ARCH_SRC/CPL_WAVE/SURFEX/read_seafluxn.F90
@@ -0,0 +1,289 @@
+!SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence
+!SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!SFX_LIC for details. version 1.
+!     #########
+      SUBROUTINE READ_SEAFLUX_n (DTCO, SG, S, U, &
+                                 HPROGRAM,KLUOUT)
+!     #########################################
+!
+!!****  *READ_SEAFLUX_n* - read SEAFLUX varaibles
+!!
+!!
+!!    PURPOSE
+!!    -------
+!!
+!!**  METHOD
+!!    ------
+!!
+!!    EXTERNAL
+!!    --------
+!!
+!!
+!!    IMPLICIT ARGUMENTS
+!!    ------------------
+!!
+!!    REFERENCE
+!!    ---------
+!!
+!!
+!!    AUTHOR
+!!    ------
+!!	V. Masson   *Meteo France*	
+!!
+!!    MODIFICATIONS
+!!    -------------
+!!      Original    01/2003 
+!!      Modified    02/2008 Add oceanic variables initialisation
+!!      S. Belamari 04/2014 Suppress LMERCATOR
+!!      R. Séférian 01/2015 introduce new ocean surface albedo 
+!!      Modified    03/2014 : M.N. Bouin  ! possibility of wave parameters
+!!                                        ! from external source
+!-------------------------------------------------------------------------------
+!
+!*       0.    DECLARATIONS
+!              ------------
+!
+!
+!
+!
+USE MODD_DATA_COVER_n, ONLY : DATA_COVER_t
+USE MODD_SEAFLUX_GRID_n, ONLY : SEAFLUX_GRID_t
+USE MODD_SEAFLUX_n, ONLY : SEAFLUX_t
+USE MODD_SURF_ATM_n, ONLY : SURF_ATM_t
+!
+USE MODD_SURF_PAR,       ONLY : XUNDEF
+!
+USE MODI_READ_SURF
+USE MODI_INTERPOL_SST_MTH
+!
+USE MODI_GET_TYPE_DIM_n
+USE MODI_ABOR1_SFX
+!
+USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
+USE PARKIND1  ,ONLY : JPRB
+!
+IMPLICIT NONE
+!
+!*       0.1   Declarations of arguments
+!              -------------------------
+!
+!
+TYPE(DATA_COVER_t), INTENT(INOUT) :: DTCO
+TYPE(SEAFLUX_GRID_t), INTENT(INOUT) :: SG
+TYPE(SEAFLUX_t), INTENT(INOUT) :: S
+TYPE(SURF_ATM_t), INTENT(INOUT) :: U
+!
+ CHARACTER(LEN=6),  INTENT(IN)  :: HPROGRAM ! calling program
+INTEGER,           INTENT(IN)  :: KLUOUT
+!
+!*       0.2   Declarations of local variables
+!              -------------------------------
+!
+INTEGER           :: JMTH, INMTH
+ CHARACTER(LEN=2 ) :: YMTH
+!
+INTEGER           :: ILU          ! 1D physical dimension
+!
+INTEGER           :: IRESP          ! Error code after redding
+!
+ CHARACTER(LEN=12) :: YRECFM         ! Name of the article to be read
+!
+INTEGER           :: IVERSION       ! surface version
+!
+REAL(KIND=JPRB) :: ZHOOK_HANDLE
+!
+!-------------------------------------------------------------------------------
+!
+!* 1D physical dimension
+!
+IF (LHOOK) CALL DR_HOOK('READ_SEAFLUX_N',0,ZHOOK_HANDLE)
+!
+YRECFM='SIZE_SEA'
+ CALL GET_TYPE_DIM_n(DTCO, U, &
+                    'SEA   ',ILU)
+!
+!*       2.     Prognostic fields:
+!               -----------------
+!
+!* water temperature
+!
+ALLOCATE(S%XSST(ILU))
+!
+IF(S%LINTERPOL_SST)THEN
+!
+! Precedent, Current, Next, and Second-next Monthly SST
+  INMTH=4
+!
+  ALLOCATE(S%XSST_MTH(SIZE(S%XSST),INMTH))
+  DO JMTH=1,INMTH
+     WRITE(YMTH,'(I2)') (JMTH-1)
+     YRECFM='SST_MTH'//ADJUSTL(YMTH(:LEN_TRIM(YMTH)))
+     CALL READ_SURF(&
+                    HPROGRAM,YRECFM,S%XSST_MTH(:,JMTH),IRESP)
+  ENDDO
+!
+  CALL INTERPOL_SST_MTH(S, &
+                        S%TTIME%TDATE%YEAR,S%TTIME%TDATE%MONTH,S%TTIME%TDATE%DAY,'T',S%XSST)
+!
+ELSE
+! 
+  ALLOCATE(S%XSST_MTH(0,0))
+!
+  YRECFM='SST'
+  CALL READ_SURF(&
+                    HPROGRAM,YRECFM,S%XSST(:),IRESP)
+!
+ENDIF
+!
+!* stochastic flux perturbation pattern
+!
+ALLOCATE(S%XPERTFLUX(ILU))
+IF( S%LPERTFLUX ) THEN
+   CALL READ_SURF(&
+                    HPROGRAM,'PERTSEAFLUX',S%XPERTFLUX(:),IRESP)
+ELSE
+  S%XPERTFLUX(:) = 0.
+ENDIF
+!
+!-------------------------------------------------------------------------------
+!
+!*       3.     Semi-prognostic fields:
+!               ----------------------
+!
+!* roughness length
+!
+ALLOCATE(S%XZ0(ILU))
+YRECFM='Z0SEA'
+S%XZ0(:) = 0.001
+ CALL READ_SURF(&
+                    HPROGRAM,YRECFM,S%XZ0(:),IRESP)
+!
+!* flag to use or not the SeaIce model 
+!
+ CALL READ_SURF(&
+                    HPROGRAM,'VERSION',IVERSION,IRESP)
+IF (IVERSION <8) THEN
+   S%LHANDLE_SIC=.FALSE.
+ELSE
+   CALL READ_SURF(&
+                    HPROGRAM,'HANDLE_SIC',S%LHANDLE_SIC,IRESP)
+ENDIF
+!
+!
+! * sea surface salinity
+!
+ALLOCATE(S%XSSS(ILU))
+S%XSSS(:)=0.0
+!
+!* Sea surface salinity nudging data
+!
+IF(S%LINTERPOL_SSS)THEN
+   !
+   ! Precedent, Current, Next, and Second-next Monthly SSS
+   INMTH=4
+   !
+   ALLOCATE(S%XSSS_MTH(ILU,INMTH))
+   DO JMTH=1,INMTH
+      WRITE(YMTH,'(I2)') (JMTH-1)
+      YRECFM='SSS_MTH'//ADJUSTL(YMTH(:LEN_TRIM(YMTH)))
+      CALL READ_SURF(&
+                    HPROGRAM,YRECFM,S%XSSS_MTH(:,JMTH),IRESP)
+      CALL CHECK_SEA(YRECFM,S%XSSS_MTH(:,JMTH))
+   ENDDO
+   !
+   CALL INTERPOL_SST_MTH(S, &
+                        S%TTIME%TDATE%YEAR,S%TTIME%TDATE%MONTH,S%TTIME%TDATE%DAY,'S',S%XSSS)
+   !
+ELSEIF (IVERSION>=8) THEN
+   ! 
+   ALLOCATE(S%XSSS_MTH(0,0))
+   !
+   YRECFM='SSS'
+   CALL READ_SURF(&
+                    HPROGRAM,YRECFM,S%XSSS,IRESP)
+   IF(S%LHANDLE_SIC)THEN
+     CALL CHECK_SEA(YRECFM,S%XSSS(:))
+   ENDIF
+   !
+ENDIF
+!
+!* ocean surface albedo (direct and diffuse fraction)
+!
+ALLOCATE(S%XDIR_ALB (ILU))
+ALLOCATE(S%XSCA_ALB (ILU))
+!
+IF(S%CSEA_ALB=='RS14')THEN
+!
+  YRECFM='OSA_DIR'
+  CALL READ_SURF(&
+                    HPROGRAM,YRECFM,S%XDIR_ALB(:),IRESP)
+!
+  YRECFM='OSA_SCA'
+  CALL READ_SURF(&
+                    HPROGRAM,YRECFM,S%XSCA_ALB(:),IRESP)
+!
+ELSE
+!
+  S%XDIR_ALB(:)=0.065
+  S%XSCA_ALB(:)=0.065
+!
+ENDIF
+!
+!* Peak frequency and significant wave height
+!
+ALLOCATE(S%XHS(ILU))
+ALLOCATE(S%XTP(ILU))
+!
+IF (.NOT.S%LWAVEWIND) THEN
+  YRECFM='HS'
+  CALL READ_SURF(HPROGRAM,YRECFM,S%XHS(:),IRESP)
+  YRECFM='TP'
+  CALL READ_SURF(HPROGRAM,YRECFM,S%XTP(:),IRESP)
+ELSE
+  S%XHS(:)=XUNDEF
+  S%XTP(:)=XUNDEF
+END IF
+!
+IF (LHOOK) CALL DR_HOOK('READ_SEAFLUX_N',1,ZHOOK_HANDLE)
+!
+!-------------------------------------------------------------------------------
+ CONTAINS
+!-------------------------------------------------------------------------------
+!
+SUBROUTINE CHECK_SEA(HFIELD,PFIELD)
+!
+!
+IMPLICIT NONE
+!
+ CHARACTER(LEN=12),  INTENT(IN) :: HFIELD
+REAL, DIMENSION(:), INTENT(IN) :: PFIELD
+!
+REAL            :: ZMAX,ZMIN
+INTEGER         :: JI, IERRC
+!
+REAL(KIND=JPRB) :: ZHOOK_HANDLE
+!
+IF (LHOOK) CALL DR_HOOK('READ_SEAFLUX_N:CHECK_SEA',0,ZHOOK_HANDLE)
+!
+ZMIN=-1.0E10
+ZMAX=1.0E10
+!
+IERRC=0
+!
+DO JI=1,ILU
+   IF(PFIELD(JI)>ZMAX.OR.PFIELD(JI)<ZMIN)THEN
+      IERRC=IERRC+1
+      WRITE(KLUOUT,*)'PROBLEM FIELD '//TRIM(HFIELD)//' =',PFIELD(JI),&
+                     'NOT REALISTIC AT LOCATION (LAT/LON)',SG%XLAT(JI),SG%XLON(JI)
+   ENDIF
+ENDDO
+!         
+IF(IERRC>0) CALL ABOR1_SFX('READ_SEAFLUX_N: FIELD '//TRIM(HFIELD)//' NOT REALISTIC')
+!
+IF (LHOOK) CALL DR_HOOK('READ_SEAFLUX_N:CHECK_SEA',1,ZHOOK_HANDLE)
+
+END SUBROUTINE CHECK_SEA
+!
+!------------------------------------------------------------------------------
+END SUBROUTINE READ_SEAFLUX_n
diff --git a/src/ARCH_SRC/CPL_WAVE/SURFEX/sfx_oasis_define.F90 b/src/ARCH_SRC/CPL_WAVE/SURFEX/sfx_oasis_define.F90
new file mode 100755
index 0000000000000000000000000000000000000000..dc983ee547fd0ec26cb6c47ceff58d95cc78516e
--- /dev/null
+++ b/src/ARCH_SRC/CPL_WAVE/SURFEX/sfx_oasis_define.F90
@@ -0,0 +1,477 @@
+!SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence
+!SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!SFX_LIC for details. version 1.
+!#########
+SUBROUTINE SFX_OASIS_DEFINE (I, U, &
+                             HPROGRAM,KNPTS,KPARAL)
+!###################################################
+!
+!!****  *SFX_OASIS_DEFINE* - Definitions for exchange of coupling fields
+!!
+!!    PURPOSE
+!!    -------
+!!
+!!**  METHOD
+!!    ------
+!!
+!!    EXTERNAL
+!!    --------
+!!
+!!
+!!    IMPLICIT ARGUMENTS
+!!    ------------------
+!!
+!!    REFERENCE
+!!    ---------
+!!
+!!
+!!    AUTHOR
+!!    ------
+!!      B. Decharme   *Meteo France*
+!!
+!!    MODIFICATIONS
+!!    -------------
+!!      Original    10/2013
+!!      Modified    11/2014 : J. Pianezze - add wave coupling parameters
+!!                                          and surface pressure for ocean coupling
+!-------------------------------------------------------------------------------
+!
+!*       0.    DECLARATIONS
+!              ------------
+!
+!
+!
+USE MODD_ISBA_n, ONLY : ISBA_t
+USE MODD_SURF_ATM_n, ONLY : SURF_ATM_t
+!
+USE MODD_SURF_PAR,  ONLY : NUNDEF
+!
+USE MODN_SFX_OASIS
+USE MODD_SFX_OASIS
+!
+USE MODI_GET_LUOUT
+USE MODI_ABOR1_SFX
+USE MODI_SFX_OASIS_CHECK
+!
+#ifdef CPLOASIS
+USE MOD_OASIS
+#endif
+!
+USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
+USE PARKIND1  ,ONLY : JPRB
+!
+IMPLICIT NONE
+!
+!*       0.1   Declarations of arguments
+!              -------------------------
+!
+!
+TYPE(ISBA_t), INTENT(INOUT) :: I
+TYPE(SURF_ATM_t), INTENT(INOUT) :: U
+!
+ CHARACTER(LEN=6),        INTENT(IN) :: HPROGRAM    ! program calling surf. schemes
+INTEGER,                 INTENT(IN) :: KNPTS  ! Number of grid point on this proc
+INTEGER, DIMENSION(:),   INTENT(IN) :: KPARAL
+!
+!
+!*       0.2   Declarations of local parameter
+!              -------------------------------
+!
+INTEGER, DIMENSION(2), PARAMETER  :: IVAR_NODIMS  = (/1,1/) ! rank and number of bundles in coupling field
+!
+!
+!*       0.3   Declarations of local variables
+!              -------------------------------
+!
+INTEGER, DIMENSION(2)          :: IVAR_SHAPE  ! indexes for the coupling field local dimension
+!
+INTEGER                        :: IPART_ID ! Local partition ID
+INTEGER                        :: IERR     ! Error info
+!
+INTEGER                        :: ILUOUT, IFLAG
+!
+REAL(KIND=JPRB) :: ZHOOK_HANDLE
+!
+!-------------------------------------------------------------------------------
+!
+IF (LHOOK) CALL DR_HOOK('SFX_OASIS_DEFINE',0,ZHOOK_HANDLE)
+!
+!-------------------------------------------------------------------------------
+#ifdef CPLOASIS
+!-------------------------------------------------------------------------------
+!
+!
+!*       0.     Initialize :
+!               ------------
+!
+CALL GET_LUOUT(HPROGRAM,ILUOUT)
+!
+CALL SFX_OASIS_CHECK(I, U, &
+                     ILUOUT)
+!
+!-------------------------------------------------------------------------------
+!
+!*       1.     Define parallel partitions:
+!               ---------------------------
+!
+CALL OASIS_DEF_PARTITION(IPART_ID,KPARAL(:),IERR)
+!
+IF(IERR/=OASIS_OK)THEN
+   WRITE(ILUOUT,*)'SFX_OASIS_DEFINE: OASIS def partition problem, err = ',IERR
+   CALL ABOR1_SFX('SFX_OASIS_DEFINE: OASIS def partition problem')
+ENDIF
+!
+!-------------------------------------------------------------------------------
+!
+!*       2.     Coupling fields shape :
+!               -----------------------
+!
+IVAR_SHAPE(1)= 1
+IVAR_SHAPE(2)= KNPTS
+!
+!-------------------------------------------------------------------------------
+!
+!*       3.     Sea variables for Surfex - Oasis coupling :
+!               -------------------------------------------
+!
+IF(LCPL_SEA)THEN
+!
+! Sea output fields
+!
+  IF(LEN_TRIM(CSEA_FWSU)/=0)THEN
+    CALL OASIS_DEF_VAR(NSEA_FWSU_ID,CSEA_FWSU,IPART_ID,IVAR_NODIMS,OASIS_OUT,IVAR_SHAPE,OASIS_DOUBLE,IERR)
+    IF(IERR/=OASIS_OK) CALL ABOR1_SFX('SFX_OASIS_DEFINE: OASIS def var problem for sea zonal wind stress')
+  ELSE
+    NSEA_FWSU_ID=NUNDEF
+  ENDIF
+!
+  IF(LEN_TRIM(CSEA_FWSV)/=0)THEN
+    CALL OASIS_DEF_VAR(NSEA_FWSV_ID,CSEA_FWSV,IPART_ID,IVAR_NODIMS,OASIS_OUT,IVAR_SHAPE,OASIS_DOUBLE,IERR)
+    IF(IERR/=OASIS_OK) CALL ABOR1_SFX('SFX_OASIS_DEFINE: OASIS def var problem for sea meridian wind stress')
+  ELSE
+    NSEA_FWSV_ID=NUNDEF
+  ENDIF
+!
+  IF(LEN_TRIM(CSEA_HEAT)/=0)THEN
+    CALL OASIS_DEF_VAR(NSEA_HEAT_ID,CSEA_HEAT,IPART_ID,IVAR_NODIMS,OASIS_OUT,IVAR_SHAPE,OASIS_DOUBLE,IERR)
+    IF(IERR/=OASIS_OK) CALL ABOR1_SFX('SFX_OASIS_DEFINE: OASIS def var problem for sea Non solar net heat flux')
+  ELSE
+    NSEA_HEAT_ID=NUNDEF
+  ENDIF
+!
+  IF(LEN_TRIM(CSEA_SNET)/=0)THEN
+    CALL OASIS_DEF_VAR(NSEA_SNET_ID,CSEA_SNET,IPART_ID,IVAR_NODIMS,OASIS_OUT,IVAR_SHAPE,OASIS_DOUBLE,IERR)
+    IF(IERR/=OASIS_OK) CALL ABOR1_SFX('SFX_OASIS_DEFINE: OASIS def var problem for sea Solar net heat')
+  ELSE
+    NSEA_SNET_ID=NUNDEF
+  ENDIF
+!
+  IF(LEN_TRIM(CSEA_WIND)/=0)THEN
+    CALL OASIS_DEF_VAR(NSEA_WIND_ID,CSEA_WIND,IPART_ID,IVAR_NODIMS,OASIS_OUT,IVAR_SHAPE,OASIS_DOUBLE,IERR)
+    IF(IERR/=OASIS_OK) CALL ABOR1_SFX('SFX_OASIS_DEFINE: OASIS def var problem for sea 10m wind speed')
+  ELSE
+    NSEA_WIND_ID=NUNDEF
+  ENDIF
+!
+  IF(LEN_TRIM(CSEA_FWSM)/=0)THEN
+    CALL OASIS_DEF_VAR(NSEA_FWSM_ID,CSEA_FWSM,IPART_ID,IVAR_NODIMS,OASIS_OUT,IVAR_SHAPE,OASIS_DOUBLE,IERR)
+    IF(IERR/=OASIS_OK) CALL ABOR1_SFX('SFX_OASIS_DEFINE: OASIS def var problem for sea wind stress')
+  ELSE
+    NSEA_FWSM_ID=NUNDEF
+  ENDIF
+!
+  IF(LEN_TRIM(CSEA_EVAP)/=0)THEN
+    CALL OASIS_DEF_VAR(NSEA_EVAP_ID,CSEA_EVAP,IPART_ID,IVAR_NODIMS,OASIS_OUT,IVAR_SHAPE,OASIS_DOUBLE,IERR)
+    IF(IERR/=OASIS_OK) CALL ABOR1_SFX('SFX_OASIS_DEFINE: OASIS def var problem for sea Evaporation')
+  ELSE
+    NSEA_EVAP_ID=NUNDEF
+  ENDIF
+!
+  IF(LEN_TRIM(CSEA_RAIN)/=0)THEN
+    CALL OASIS_DEF_VAR(NSEA_RAIN_ID,CSEA_RAIN,IPART_ID,IVAR_NODIMS,OASIS_OUT,IVAR_SHAPE,OASIS_DOUBLE,IERR)
+    IF(IERR/=OASIS_OK) CALL ABOR1_SFX('SFX_OASIS_DEFINE: OASIS def var problem for sea Rainfall rate')
+  ELSE
+    NSEA_RAIN_ID=NUNDEF
+  ENDIF
+!
+  IF(LEN_TRIM(CSEA_SNOW)/=0)THEN
+    CALL OASIS_DEF_VAR(NSEA_SNOW_ID,CSEA_SNOW,IPART_ID,IVAR_NODIMS,OASIS_OUT,IVAR_SHAPE,OASIS_DOUBLE,IERR)
+    IF(IERR/=OASIS_OK) CALL ABOR1_SFX('SFX_OASIS_DEFINE: OASIS def var problem for sea Snowfall rate')
+  ELSE
+    NSEA_SNOW_ID=NUNDEF
+  ENDIF
+!
+  IF(LEN_TRIM(CSEA_EVPR)/=0)THEN
+    CALL OASIS_DEF_VAR(NSEA_EVPR_ID,CSEA_EVPR,IPART_ID,IVAR_NODIMS,OASIS_OUT,IVAR_SHAPE,OASIS_DOUBLE,IERR)
+    IF(IERR/=OASIS_OK) CALL ABOR1_SFX('SFX_OASIS_DEFINE: OASIS def var problem for sea Evap.-Precip. rate')
+  ELSE
+    NSEA_EVPR_ID=NUNDEF
+  ENDIF
+!
+  IF(LEN_TRIM(CSEA_WATF)/=0)THEN
+    CALL OASIS_DEF_VAR(NSEA_WATF_ID,CSEA_WATF,IPART_ID,IVAR_NODIMS,OASIS_OUT,IVAR_SHAPE,OASIS_DOUBLE,IERR)
+    IF(IERR/=OASIS_OK) CALL ABOR1_SFX('SFX_OASIS_DEFINE: OASIS def var problem for sea freshwater rate')
+  ELSE
+    NSEA_WATF_ID=NUNDEF
+  ENDIF
+!
+  IF(LEN_TRIM(CSEA_PRES)/=0)THEN
+    CALL OASIS_DEF_VAR(NSEA_PRES_ID,CSEA_PRES,IPART_ID,IVAR_NODIMS,OASIS_OUT,IVAR_SHAPE,OASIS_DOUBLE,IERR)
+    IF(IERR/=OASIS_OK) CALL ABOR1_SFX('SFX_OASIS_DEFINE: OASIS def var problem for surface pressure')
+  ELSE
+    NSEA_PRES_ID=NUNDEF
+  ENDIF
+!
+! Sea intput fields
+!
+  IF(LEN_TRIM(CSEA_SST)/=0)THEN
+    CALL OASIS_DEF_VAR(NSEA_SST_ID,CSEA_SST,IPART_ID,IVAR_NODIMS,OASIS_IN,IVAR_SHAPE,OASIS_DOUBLE,IERR)
+    IF(IERR/=OASIS_OK) CALL ABOR1_SFX('SFX_OASIS_DEFINE: OASIS def var problem for Sea surface temperature')
+  ELSE
+    NSEA_SST_ID=NUNDEF
+  ENDIF
+!
+  IF(LEN_TRIM(CSEA_UCU)/=0)THEN
+    CALL OASIS_DEF_VAR(NSEA_UCU_ID,CSEA_UCU,IPART_ID,IVAR_NODIMS,OASIS_IN,IVAR_SHAPE,OASIS_DOUBLE,IERR)
+    IF(IERR/=OASIS_OK) CALL ABOR1_SFX('SFX_OASIS_DEFINE: OASIS def var problem for Sea u-current stress')
+  ELSE
+    NSEA_UCU_ID=NUNDEF
+  ENDIF
+!
+  IF(LEN_TRIM(CSEA_VCU)/=0)THEN
+    CALL OASIS_DEF_VAR(NSEA_VCU_ID,CSEA_VCU,IPART_ID,IVAR_NODIMS,OASIS_IN,IVAR_SHAPE,OASIS_DOUBLE,IERR)
+    IF(IERR/=OASIS_OK) CALL ABOR1_SFX('SFX_OASIS_DEFINE: OASIS def var problem for Sea v-current stress')
+  ELSE
+    NSEA_VCU_ID=NUNDEF
+  ENDIF
+!
+! Particular case due to Sea-ice
+!
+  IF(LCPL_SEAICE)THEN
+!
+!   Output fields
+!
+    IF(LEN_TRIM(CSEAICE_HEAT)/=0)THEN
+      CALL OASIS_DEF_VAR(NSEAICE_HEAT_ID,CSEAICE_HEAT,IPART_ID,IVAR_NODIMS,OASIS_OUT,IVAR_SHAPE,OASIS_DOUBLE,IERR)
+      IF(IERR/=OASIS_OK) CALL ABOR1_SFX('SFX_OASIS_DEFINE: OASIS def var problem for Sea-ice non solar net heat')
+    ELSE
+      NSEAICE_HEAT_ID=NUNDEF
+    ENDIF
+!
+    IF(LEN_TRIM(CSEAICE_SNET)/=0)THEN
+      CALL OASIS_DEF_VAR(NSEAICE_SNET_ID,CSEAICE_SNET,IPART_ID,IVAR_NODIMS,OASIS_OUT,IVAR_SHAPE,OASIS_DOUBLE,IERR)
+      IF(IERR/=OASIS_OK) CALL ABOR1_SFX('SFX_OASIS_DEFINE: OASIS def var problem for Sea-ice solar net heat flux')
+    ELSE
+      NSEAICE_SNET_ID=NUNDEF
+    ENDIF
+!
+    IF(LEN_TRIM(CSEAICE_EVAP)/=0)THEN
+      CALL OASIS_DEF_VAR(NSEAICE_EVAP_ID,CSEAICE_EVAP,IPART_ID,IVAR_NODIMS,OASIS_OUT,IVAR_SHAPE,OASIS_DOUBLE,IERR)
+      IF(IERR/=OASIS_OK) CALL ABOR1_SFX('SFX_OASIS_DEFINE: OASIS def var problem for Sea-ice sublimation')
+    ELSE
+      NSEAICE_EVAP_ID=NUNDEF
+    ENDIF
+!
+!   Intput fields
+!
+    CALL OASIS_DEF_VAR(NSEAICE_SIT_ID,CSEAICE_SIT,IPART_ID,IVAR_NODIMS,OASIS_IN,IVAR_SHAPE,OASIS_DOUBLE,IERR)
+    IF(IERR/=OASIS_OK) CALL ABOR1_SFX('SFX_OASIS_DEFINE: OASIS def var problem for Sea-ice non solar net heat')
+!
+    CALL OASIS_DEF_VAR(NSEAICE_CVR_ID,CSEAICE_CVR,IPART_ID,IVAR_NODIMS,OASIS_IN,IVAR_SHAPE,OASIS_DOUBLE,IERR)
+    IF(IERR/=OASIS_OK) CALL ABOR1_SFX('SFX_OASIS_DEFINE: OASIS def var problem for Sea-ice non solar net heat')
+!
+    CALL OASIS_DEF_VAR(NSEAICE_ALB_ID,CSEAICE_ALB,IPART_ID,IVAR_NODIMS,OASIS_IN,IVAR_SHAPE,OASIS_DOUBLE,IERR)
+    IF(IERR/=OASIS_OK) CALL ABOR1_SFX('SFX_OASIS_DEFINE: OASIS def var problem for Sea-ice non solar net heat')
+!
+  ENDIF
+!
+ENDIF
+!
+!-------------------------------------------------------------------------------
+!
+!*       4.     Lake variables for Surfex - Oasis coupling :
+!               -------------------------------------------
+!
+IF(LCPL_LAKE)THEN
+!
+! Output fields
+!
+  IF(LEN_TRIM(CLAKE_EVAP)/=0)THEN
+    CALL OASIS_DEF_VAR(NLAKE_EVAP_ID,CLAKE_EVAP,IPART_ID,IVAR_NODIMS,OASIS_OUT,IVAR_SHAPE,OASIS_DOUBLE,IERR)
+    IF(IERR/=OASIS_OK) CALL ABOR1_SFX('SFX_OASIS_DEFINE: OASIS def var problem for lake Evaporation')
+  ELSE
+    NLAKE_EVAP_ID=NUNDEF
+  ENDIF
+!
+  IF(LEN_TRIM(CLAKE_RAIN)/=0)THEN
+    CALL OASIS_DEF_VAR(NLAKE_RAIN_ID,CLAKE_RAIN,IPART_ID,IVAR_NODIMS,OASIS_OUT,IVAR_SHAPE,OASIS_DOUBLE,IERR)
+    IF(IERR/=OASIS_OK) CALL ABOR1_SFX('SFX_OASIS_DEFINE: OASIS def var problem for lake Rainfall rate')
+  ELSE
+    NLAKE_RAIN_ID=NUNDEF
+  ENDIF
+!
+  IF(LEN_TRIM(CLAKE_SNOW)/=0)THEN
+    CALL OASIS_DEF_VAR(NLAKE_SNOW_ID,CLAKE_SNOW,IPART_ID,IVAR_NODIMS,OASIS_OUT,IVAR_SHAPE,OASIS_DOUBLE,IERR)
+    IF(IERR/=OASIS_OK) CALL ABOR1_SFX('SFX_OASIS_DEFINE: OASIS def var problem for lake Snowfall rate')
+  ELSE
+    NLAKE_SNOW_ID=NUNDEF
+  ENDIF
+!
+  IF(LEN_TRIM(CLAKE_WATF)/=0)THEN
+    CALL OASIS_DEF_VAR(NLAKE_WATF_ID,CLAKE_WATF,IPART_ID,IVAR_NODIMS,OASIS_OUT,IVAR_SHAPE,OASIS_DOUBLE,IERR)
+    IF(IERR/=OASIS_OK) CALL ABOR1_SFX('SFX_OASIS_DEFINE: OASIS def var problem for sea freshwater rate')
+  ELSE
+    NLAKE_WATF_ID=NUNDEF
+  ENDIF
+!
+ENDIF
+!
+!-------------------------------------------------------------------------------
+!
+!*       5.     Land surface variables for Surfex - Oasis coupling :
+!               ----------------------------------------------------
+!
+IF(LCPL_LAND)THEN
+!
+! Output Surface runoff
+!
+  CALL OASIS_DEF_VAR(NRUNOFF_ID,CRUNOFF,IPART_ID,IVAR_NODIMS,OASIS_OUT,IVAR_SHAPE,OASIS_DOUBLE,IERR)
+  IF(IERR/=OASIS_OK) CALL ABOR1_SFX('SFX_OASIS_DEFINE: OASIS def var problem for land Surface runoff')
+!
+! Output Calving flux
+!
+  IF(LCPL_CALVING)THEN
+!
+!     Output Calving flux
+      CALL OASIS_DEF_VAR(NCALVING_ID,CCALVING,IPART_ID,IVAR_NODIMS,OASIS_OUT,IVAR_SHAPE,OASIS_DOUBLE,IERR)  
+      IF(IERR/=OASIS_OK) CALL ABOR1_SFX('SFX_OASIS_DEFINE: OASIS def var problem for land Calving flux')
+!
+  ENDIF  
+!
+! Output Deep drainage
+!
+  CALL OASIS_DEF_VAR(NDRAIN_ID,CDRAIN,IPART_ID,IVAR_NODIMS,OASIS_OUT,IVAR_SHAPE,OASIS_DOUBLE,IERR)  
+  IF(IERR/=OASIS_OK) CALL ABOR1_SFX('SFX_OASIS_DEFINE: OASIS def var problem for land Deep drainage')
+!
+! Particular case due to water table depth / surface coupling
+!
+  IF(LCPL_GW)THEN
+!
+!     Output groundwater recharge
+      CALL OASIS_DEF_VAR(NRECHARGE_ID,CRECHARGE,IPART_ID,IVAR_NODIMS,OASIS_OUT,IVAR_SHAPE,OASIS_DOUBLE,IERR)  
+      IF(IERR/=OASIS_OK) CALL ABOR1_SFX('SFX_OASIS_DEFINE: OASIS def var problem for land groundwater recharge')
+!      
+!     Input Water table depth
+      CALL OASIS_DEF_VAR(NWTD_ID,CWTD,IPART_ID,IVAR_NODIMS,OASIS_IN,IVAR_SHAPE,OASIS_DOUBLE,IERR)  
+      IF(IERR/=OASIS_OK) CALL ABOR1_SFX('SFX_OASIS_DEFINE: OASIS def var problem for land Water table depth')
+!          
+!     Input grid-cell fraction of WTD to rise
+      CALL OASIS_DEF_VAR(NFWTD_ID,CFWTD,IPART_ID,IVAR_NODIMS,OASIS_IN,IVAR_SHAPE,OASIS_DOUBLE,IERR)  
+      IF(IERR/=OASIS_OK) CALL ABOR1_SFX('SFX_OASIS_DEFINE: OASIS def var problem for land fraction of WTD to rise')
+!   
+  ENDIF      
+!
+! Particular case due to floodplains coupling
+!
+  IF(LCPL_FLOOD)THEN
+!
+!   Output Flood precip interception
+    CALL OASIS_DEF_VAR(NSRCFLOOD_ID,CSRCFLOOD,IPART_ID,IVAR_NODIMS,OASIS_OUT,IVAR_SHAPE,OASIS_DOUBLE,IERR)  
+    IF(IERR/=OASIS_OK) CALL ABOR1_SFX('SFX_OASIS_DEFINE: OASIS def var problem for land Floodplains freshwater flux')
+!          
+!   Input floodplains fraction
+    CALL OASIS_DEF_VAR(NFFLOOD_ID,CFFLOOD,IPART_ID,IVAR_NODIMS,OASIS_IN,IVAR_SHAPE,OASIS_DOUBLE,IERR)  
+    IF(IERR/=OASIS_OK) CALL ABOR1_SFX('SFX_OASIS_DEFINE: OASIS def var problem for land Floodplains fraction')
+!          
+!   Input floodplains potential infiltration
+    CALL OASIS_DEF_VAR(NPIFLOOD_ID,CPIFLOOD,IPART_ID,IVAR_NODIMS,OASIS_IN,IVAR_SHAPE,OASIS_DOUBLE,IERR)  
+    IF(IERR/=OASIS_OK) CALL ABOR1_SFX('SFX_OASIS_DEFINE: OASIS def var problem for land Floodplains potential infiltration')
+!    
+  ENDIF
+!
+ENDIF
+!
+!-------------------------------------------------------------------------------
+!
+!*       6.     Wave variables for Surfex - Oasis coupling :
+!               -------------------------------------------
+!
+IF(LCPL_WAVE) THEN
+!
+! Wave output fields
+!
+  IF(LEN_TRIM(CWAVE_U10)/=0)THEN
+    CALL OASIS_DEF_VAR(NWAVE_U10_ID,CWAVE_U10,IPART_ID,IVAR_NODIMS,OASIS_OUT,IVAR_SHAPE,OASIS_REAL,IERR)
+    IF(IERR/=OASIS_OK) CALL ABOR1_SFX('SFX_OASIS_DEFINE: OASIS def var problem for U10')
+  ELSE
+    NWAVE_U10_ID=NUNDEF
+  ENDIF
+!
+  IF(LEN_TRIM(CWAVE_V10)/=0)THEN
+    CALL OASIS_DEF_VAR(NWAVE_V10_ID,CWAVE_V10,IPART_ID,IVAR_NODIMS,OASIS_OUT,IVAR_SHAPE,OASIS_REAL,IERR)
+    IF(IERR/=OASIS_OK) CALL ABOR1_SFX('SFX_OASIS_DEFINE: OASIS def var problem for V10')
+  ELSE
+    NWAVE_V10_ID=NUNDEF
+  ENDIF
+!
+! Wave input fields
+!
+  IF (LEN_TRIM(CWAVE_CHA)/=0)THEN
+    CALL OASIS_DEF_VAR(NWAVE_CHA_ID,CWAVE_CHA,IPART_ID,IVAR_NODIMS,OASIS_IN,IVAR_SHAPE,OASIS_REAL,IERR)
+    IF(IERR/=OASIS_OK) CALL ABOR1_SFX('SFX_OASIS_DEFINE: OASIS def var problem for CHA')
+  ELSE
+    NWAVE_CHA_ID=NUNDEF
+  ENDIF
+!
+  IF (LEN_TRIM(CWAVE_UCU)/=0)THEN
+    CALL OASIS_DEF_VAR(NWAVE_UCU_ID,CWAVE_UCU,IPART_ID,IVAR_NODIMS,OASIS_IN,IVAR_SHAPE,OASIS_REAL,IERR)
+    IF(IERR/=OASIS_OK) CALL ABOR1_SFX('SFX_OASIS_DEFINE: OASIS def var problem for UCU')
+  ELSE
+    NWAVE_UCU_ID=NUNDEF
+  ENDIF
+!
+  IF (LEN_TRIM(CWAVE_VCU)/=0)THEN
+    CALL OASIS_DEF_VAR(NWAVE_VCU_ID,CWAVE_VCU,IPART_ID,IVAR_NODIMS,OASIS_IN,IVAR_SHAPE,OASIS_REAL,IERR)
+    IF(IERR/=OASIS_OK) CALL ABOR1_SFX('SFX_OASIS_DEFINE: OASIS def var problem for VCU')
+  ELSE
+    NWAVE_VCU_ID=NUNDEF
+  ENDIF
+!
+  IF (LEN_TRIM(CWAVE_HS)/=0)THEN
+    CALL OASIS_DEF_VAR(NWAVE_HS_ID,CWAVE_HS,IPART_ID,IVAR_NODIMS,OASIS_IN,IVAR_SHAPE,OASIS_REAL,IERR)
+    IF(IERR/=OASIS_OK) CALL ABOR1_SFX('SFX_OASIS_DEFINE: OASIS def var problem for HS')
+  ELSE
+    NWAVE_HS_ID=NUNDEF
+  ENDIF
+!
+  IF (LEN_TRIM(CWAVE_TP)/=0)THEN
+    CALL OASIS_DEF_VAR(NWAVE_TP_ID,CWAVE_TP,IPART_ID,IVAR_NODIMS,OASIS_IN,IVAR_SHAPE,OASIS_REAL,IERR)
+    IF(IERR/=OASIS_OK) CALL ABOR1_SFX('SFX_OASIS_DEFINE: OASIS def var problem for TP')
+  ELSE
+    NWAVE_TP_ID=NUNDEF
+  ENDIF
+!
+ENDIF
+!
+!-------------------------------------------------------------------------------
+!
+!*       7.     End of declaration phase:
+!               --------------
+!
+CALL OASIS_ENDDEF(IERR)
+!
+IF(IERR/=OASIS_OK)THEN
+   WRITE(ILUOUT,*)'SFX_OASIS_DEFINE: OASIS enddef problem, err = ',IERR
+   CALL ABOR1_SFX('SFX_OASIS_DEFINE: OASIS enddef problem')
+ENDIF
+!
+!-------------------------------------------------------------------------------
+#endif
+!-------------------------------------------------------------------------------
+!
+IF (LHOOK) CALL DR_HOOK('SFX_OASIS_DEFINE',1,ZHOOK_HANDLE)
+!
+!-------------------------------------------------------------------------------
+!
+END SUBROUTINE SFX_OASIS_DEFINE
diff --git a/src/ARCH_SRC/CPL_WAVE/SURFEX/sfx_oasis_init.F90 b/src/ARCH_SRC/CPL_WAVE/SURFEX/sfx_oasis_init.F90
new file mode 100755
index 0000000000000000000000000000000000000000..28c4a8444b12adf33bbfde880941b24cadb62250
--- /dev/null
+++ b/src/ARCH_SRC/CPL_WAVE/SURFEX/sfx_oasis_init.F90
@@ -0,0 +1,313 @@
+!SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence
+!SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!SFX_LIC for details. version 1.
+!#########
+SUBROUTINE SFX_OASIS_INIT(HNAMELIST,KLOCAL_COMM,HINIT)
+!!
+!!
+!!     PURPOSE
+!!     --------
+!!
+!!     Initialize coupled mode communication
+!!
+!!
+!!     METHOD
+!!     ------
+!!
+!!     OASIS-MCT usage is controlled by environment variables
+!!     OASIS-MCT interface must be initialized before any DR_HOOK call
+!!
+!!
+!!     EXTERNAL
+!!     --------
+!!
+!!
+!!     REFERENCE
+!!     ---------
+!!
+!!     S. Valcke et al., 2013: OASIS-MCT User Guide 
+!!     CERFACS, Toulouse, France, 50 pp.
+!!     https://verc.enes.org/oasis/oasis-dedicated-user-support-1/documentation/oasis3-mct-user-guide
+!!
+!!
+!!     AUTHOR
+!!     ------
+!!
+!!     B. Decharme, CNRM
+!!
+!!     MODIFICATION
+!!     --------------
+!!
+!!     Original    10/2013
+!!     Modified    11/2014 : J. Pianezze - add LOASIS_GRID flag
+!!
+!
+!-------------------------------------------------------------------------------
+!
+!*       0.    DECLARATIONS
+!              ------------
+!
+USE MODD_SFX_OASIS, ONLY : LOASIS, LOASIS_GRID, XRUNTIME
+!
+#ifdef CPLOASIS
+USE MOD_OASIS
+#endif
+!
+IMPLICIT NONE
+!
+#ifdef CPLOASIS
+INCLUDE 'mpif.h'
+#endif
+!
+!*       0.1   Declarations of arguments
+!              -------------------------
+!
+CHARACTER(LEN=28), INTENT(IN )           :: HNAMELIST
+INTEGER,           INTENT(OUT)           :: KLOCAL_COMM ! value of local communicator
+CHARACTER(LEN=3),  INTENT(IN ), OPTIONAL :: HINIT       ! choice of fields to initialize
+!
+!*       0.2   Declarations of local variables
+!              -------------------------------
+!
+CHARACTER(LEN=9)   :: YWORD, YTIMERUN
+CHARACTER(LEN=1000):: YLINE, YFOUND
+INTEGER            :: IERR, IWORK, IRANK
+INTEGER            :: ICOMP_ID
+INTEGER            :: ITIMERUN
+LOGICAL            :: GFOUND
+CHARACTER(LEN=3)   :: YINIT
+!
+!
+!*       0.3   Declarations of namelist variables
+!              ----------------------------------
+!
+CHARACTER(LEN=6)      :: CMODEL_NAME ! component model name
+!
+NAMELIST/NAM_OASIS/LOASIS,LOASIS_GRID,CMODEL_NAME
+!
+!-------------------------------------------------------------------------------
+!
+! ATTENTION : Do not introduce DR_HOOK in this routine
+!
+!*       0.     Initialization:
+!               ---------------
+!
+LOASIS      = .FALSE.
+LOASIS_GRID = .FALSE.
+CMODEL_NAME = 'surfex'
+XRUNTIME    = 0.0
+!
+YINIT = 'ALL'
+IF(PRESENT(HINIT))YINIT=HINIT
+!
+!-------------------------------------------------------------------------------
+!
+!*       1.     Read namelist:
+!               --------------
+!
+IF(LEN_TRIM(HNAMELIST)/=0)THEN
+!
+  OPEN(UNIT=11,FILE=HNAMELIST,ACTION='READ',FORM="FORMATTED",POSITION="REWIND",STATUS='OLD',IOSTAT=IERR)   
+!
+  IF (IERR /= 0) THEN
+     WRITE(*,'(A)' )'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!'
+     WRITE(*,'(2A)')'SFX_OASIS_INIT: SFX NAMELIST NOT FOUND: ',TRIM(HNAMELIST)
+     WRITE(*,'(A)' )'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!'
+     CALL ABORT
+     STOP
+  ENDIF
+!
+  READ (UNIT=11,NML=NAM_OASIS,IOSTAT=IERR)
+!
+  CLOSE(UNIT=11)
+!
+ENDIF
+!
+!-------------------------------------------------------------------------------
+!
+!*       2.     Setup OASIS
+!               -----------
+!
+IF(LOASIS)THEN
+!
+#ifdef CPLOASIS
+  CALL OASIS_INIT_COMP(ICOMP_ID,CMODEL_NAME,IERR)  
+  IF (IERR/=OASIS_OK) THEN
+     WRITE(*,'(A)'   )'SFX : Error initializing OASIS'
+     WRITE(*,'(A,I4)')'SFX : Return code from oasis_init_comp : ',IERR
+     CALL OASIS_ABORT(ICOMP_ID,CMODEL_NAME,'SFX_OASIS_INIT: Error initializing OASIS')
+     CALL ABORT
+     STOP
+  ENDIF
+  CALL MPI_COMM_RANK(MPI_COMM_WORLD,IRANK,IWORK)
+#endif
+!
+  IF(IRANK==0)THEN
+    WRITE(*,'(A)')'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!'
+    WRITE(*,'(A)')'OASIS used for model : ',TRIM(CMODEL_NAME)
+    WRITE(*,'(A)')'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!'
+  ENDIF
+!
+ELSE
+!
+  KLOCAL_COMM=0
+  RETURN
+!
+ENDIF
+!-------------------------------------------------------------------------------
+!
+!*       4.     Get local communicator
+!               ----------------------
+!
+#ifdef CPLOASIS
+CALL OASIS_GET_LOCALCOMM(KLOCAL_COMM,IERR) 
+IF (IERR/=OASIS_OK) THEN
+   IF(IRANK==0)THEN
+     WRITE(*,'(A)'   )'SFX : Error getting local communicator from OASIS'
+     WRITE(*,'(A,I4)')'SFX : Return code from oasis_get_local_comm : ',IERR
+   ENDIF
+   CALL OASIS_ABORT(ICOMP_ID,CMODEL_NAME,'SFX_OASIS_INIT: Error getting local communicator')
+   CALL ABORT
+   STOP
+ENDIF
+#endif
+!
+!-------------------------------------------------------------------------------
+!
+!
+IF(YINIT=='PRE')THEN
+  RETURN
+ENDIF  
+!
+!*       5.     Read total simulated time in namcouple
+!               --------------------------------------
+!
+OPEN (UNIT=11,FILE ='namcouple',STATUS='OLD',FORM ='FORMATTED',POSITION="REWIND",IOSTAT=IERR)
+IF (IERR /= 0) THEN
+   IF(IRANK==0)THEN
+     WRITE(*,'(A)'   )'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!'
+     WRITE(*,'(A)'   )'SFX : OASIS namcouple not found'
+     WRITE(*,'(A)'   )'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!'
+   ENDIF  
+   CALL ABORT
+   STOP
+ENDIF
+!
+YTIMERUN=' $RUNTIME'
+ITIMERUN=-1
+!
+DO WHILE (ITIMERUN==-1)
+   READ (UNIT = 11,FMT = '(A9)',IOSTAT=IERR) YWORD
+   IF(IERR/=0)THEN
+      IF(IRANK==0)THEN
+        WRITE(*,'(A)'   )'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!'
+        WRITE(*,'(A)'   )'SFX : Problem $RUNTIME empty in namcouple'
+        WRITE(*,'(A)'   )'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!' 
+      ENDIF  
+      CALL ABORT
+      STOP           
+   ENDIF  
+   IF (YWORD==YTIMERUN)THEN
+      READ (UNIT = 11,FMT = '(A1000)',IOSTAT=IERR) YLINE
+      IF(IERR/=0)THEN
+        IF(IRANK==0)THEN
+          WRITE(*,'(A)'   )'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!'
+          WRITE(*,'(A)'   )'SFX : Problem looking for $RUNTIME in namcouple'
+          WRITE(*,'(A)'   )'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!' 
+        ENDIF  
+        CALL ABORT
+        STOP           
+      ENDIF
+      CALL FOUND_TIMERUN (YLINE, YFOUND, 1000, GFOUND)
+      IF (GFOUND) THEN
+          READ (YFOUND,FMT = '(I100)',IOSTAT=IERR) ITIMERUN
+          IF(IERR/=0)THEN
+            IF(IRANK==0)THEN
+              WRITE(*,'(A)'   )'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!'
+              WRITE(*,'(A)'   )'SFX : Problem reading $RUNTIME in namcouple'
+              WRITE(*,'(2A)'  )'$RUNTIME = ', TRIM(YFOUND)
+              WRITE(*,'(A)'   )'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!' 
+            ENDIF  
+            CALL ABORT
+            STOP
+          ENDIF
+      ENDIF
+   ENDIF
+ENDDO
+CLOSE(11)
+!
+XRUNTIME = REAL(ITIMERUN)
+!
+WRITE(*,'(A)' )'-----------------------------'
+!
+!-------------------------------------------------------------------------------
+CONTAINS
+!-------------------------------------------------------------------------------
+!
+SUBROUTINE FOUND_TIMERUN(HIN, HOUT, KLEN, OFOUND)
+!
+IMPLICIT NONE
+!
+INTEGER ,          INTENT (IN   ) :: KLEN
+CHARACTER (LEN=*), INTENT (INOUT) :: HIN 
+CHARACTER (LEN=*), INTENT (INOUT) :: HOUT
+LOGICAL,           INTENT (OUT  ) :: OFOUND
+!
+!* ---------------------------- Local declarations -------------------
+!
+CHARACTER(LEN=1), PARAMETER :: YBLANK = ' '
+CHARACTER(LEN=1), PARAMETER :: YNADA  = '#'
+
+CHARACTER(LEN=KLEN) :: YLINE
+CHARACTER(LEN=KLEN) :: YWORK
+!
+INTEGER             :: ILEN
+INTEGER             :: IERR
+!
+!
+!*    1. Skip line if it is a comment
+!        ----------------------------
+!
+DO WHILE (HIN(1:1)==YNADA)
+   READ (UNIT = 11, FMT = '(A9)',IOSTAT=IERR) YLINE 
+   IF(IERR/=0)THEN
+       IF(IRANK==0)THEN
+         WRITE(*,'(A)'   )'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!'
+         WRITE(*,'(A)'   )'SFX : Problem looking for $RUNTINE line in namcouple'
+         WRITE(*,'(A)'   )'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!' 
+       ENDIF
+       CALL ABORT
+       STOP           
+   ENDIF
+   HIN(1:KLEN) = YLINE(1:KLEN)
+ENDDO 
+!
+!* Fill HOUT with blanks
+!
+HOUT = YBLANK
+!
+!* Fill temporary string and remove leading blanks
+!
+YWORK = ADJUSTL(HIN)
+!
+IF(LEN_TRIM(YWORK)<=0)THEN
+   OFOUND = .FALSE.
+   RETURN
+ENDIF
+!
+!* Find the length of this set of characters
+!
+ILEN = INDEX(YWORK,YBLANK) - 1
+!
+!* Copy to HOUT
+!
+HOUT(1:ILEN) = YWORK(1:ILEN)
+!
+OFOUND = .TRUE.
+!
+END SUBROUTINE FOUND_TIMERUN
+!
+!-------------------------------------------------------------------------------
+!
+END SUBROUTINE SFX_OASIS_INIT
diff --git a/src/ARCH_SRC/CPL_WAVE/SURFEX/sfx_oasis_read_nam.F90 b/src/ARCH_SRC/CPL_WAVE/SURFEX/sfx_oasis_read_nam.F90
new file mode 100755
index 0000000000000000000000000000000000000000..67d95fc476e67e23f85ccee5f102798a5977d7b8
--- /dev/null
+++ b/src/ARCH_SRC/CPL_WAVE/SURFEX/sfx_oasis_read_nam.F90
@@ -0,0 +1,574 @@
+!SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence
+!SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!SFX_LIC for details. version 1.
+!#########
+SUBROUTINE SFX_OASIS_READ_NAM(HPROGRAM,PTSTEP_SURF,HINIT)
+!##################################################################
+!
+!!****  *SFX_OASIS_READ_NAM* - routine to read the configuration for SFX-OASIS coupling
+!!
+!!    PURPOSE
+!!    -------
+!!
+!!**  METHOD
+!!    ------
+!!
+!!    EXTERNAL
+!!    --------
+!!
+!!
+!!    IMPLICIT ARGUMENTS
+!!    ------------------
+!!
+!!    REFERENCE
+!!    ---------
+!!
+!!
+!!    AUTHOR
+!!    ------
+!!      B. Decharme   *Meteo France*
+!!
+!!    MODIFICATIONS
+!!    -------------
+!!      Original    05/2008 
+!!      Modified    11/2014 : J. Pianezze - add wave coupling parameters
+!!                                          and surface pressure for ocean coupling
+!-------------------------------------------------------------------------------
+!
+!*       0.    DECLARATIONS
+!              ------------
+!
+USE MODN_SFX_OASIS
+!
+USE MODD_SFX_OASIS, ONLY : LOASIS, XRUNTIME,               &
+                           LCPL_LAND, LCPL_GW, LCPL_FLOOD, &
+                           LCPL_CALVING, LCPL_LAKE,        &
+                           LCPL_SEA, LCPL_SEAICE,          &
+                           LCPL_WAVE
+!
+USE MODE_POS_SURF
+!
+USE MODI_GET_LUOUT
+USE MODI_OPEN_NAMELIST
+USE MODI_CLOSE_NAMELIST
+!
+USE MODI_ABOR1_SFX
+!
+USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
+USE PARKIND1  ,ONLY : JPRB
+!
+IMPLICIT NONE
+!
+!*       0.1   Declarations of arguments
+!              -------------------------
+!
+CHARACTER(LEN=6), INTENT(IN)           :: HPROGRAM    ! program calling surf. schemes
+REAL,             INTENT(IN)           :: PTSTEP_SURF ! Surfex time step
+CHARACTER(LEN=3), INTENT(IN), OPTIONAL :: HINIT       ! choice of fields to initialize
+!
+!*       0.2   Declarations of local parameter
+!              -------------------------------
+!
+INTEGER,          PARAMETER :: KIN   = 1
+INTEGER,          PARAMETER :: KOUT  = 0
+CHARACTER(LEN=5), PARAMETER :: YLAND = 'land'
+CHARACTER(LEN=5), PARAMETER :: YLAKE = 'lake'
+CHARACTER(LEN=5), PARAMETER :: YSEA  = 'ocean'
+CHARACTER(LEN=5), PARAMETER :: YWAVE = 'wave'
+!
+!*       0.3   Declarations of local variables
+!              -------------------------------
+!
+LOGICAL            :: GFOUND         ! Return code when searching namelist
+INTEGER            :: ILUOUT         ! Listing id
+INTEGER            :: ILUNAM         ! logical unit of namelist file
+CHARACTER(LEN=20)  :: YKEY
+CHARACTER(LEN=50)  :: YCOMMENT
+CHARACTER(LEN=3)   :: YINIT
+!
+REAL(KIND=JPRB) :: ZHOOK_HANDLE
+!
+!-------------------------------------------------------------------------------
+!
+IF (LHOOK) CALL DR_HOOK('SFX_OASIS_READ_NAM',0,ZHOOK_HANDLE)
+!
+!
+!*       0.     Initialize :
+!               ------------
+!
+LCPL_LAND    = .FALSE.
+LCPL_GW      = .FALSE.
+LCPL_FLOOD   = .FALSE.
+LCPL_CALVING = .FALSE.
+LCPL_LAKE    = .FALSE.
+LCPL_SEA     = .FALSE.
+LCPL_SEAICE  = .FALSE.
+LCPL_WAVE    = .FALSE.
+!
+IF(.NOT.LOASIS)THEN
+  IF (LHOOK) CALL DR_HOOK('SFX_OASIS_READ_NAM',1,ZHOOK_HANDLE)
+  RETURN
+ENDIF
+!
+YINIT = 'ALL'
+IF(PRESENT(HINIT))YINIT=HINIT
+!
+CALL GET_LUOUT(HPROGRAM,ILUOUT)
+!
+!*       1.     Read namelists and check status :
+!               --------------------------------
+!
+CALL OPEN_NAMELIST(HPROGRAM,ILUNAM)
+!
+CALL POSNAM(ILUNAM,'NAM_SFX_LAND_CPL',GFOUND,ILUOUT)
+!
+IF (GFOUND) THEN
+   READ(UNIT=ILUNAM,NML=NAM_SFX_LAND_CPL)
+ELSE
+   WRITE(ILUOUT,*)'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!'
+   WRITE(ILUOUT,*)'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!'
+   WRITE(ILUOUT,*)'NAM_SFX_LAND_CPL not found : Surfex land not coupled with river routing'
+   WRITE(ILUOUT,*)'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!'
+   WRITE(ILUOUT,*)'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!'
+ENDIF
+!
+CALL POSNAM(ILUNAM,'NAM_SFX_SEA_CPL',GFOUND,ILUOUT)
+!
+IF (GFOUND) THEN
+   READ(UNIT=ILUNAM,NML=NAM_SFX_SEA_CPL)
+ELSE
+   WRITE(ILUOUT,*)'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!'
+   WRITE(ILUOUT,*)'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!'
+   WRITE(ILUOUT,*)'NAM_SFX_SEA_CPL not found : Surfex sea not coupled with ocean model'
+   WRITE(ILUOUT,*)'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!'
+   WRITE(ILUOUT,*)'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!'
+ENDIF
+!
+ CALL POSNAM(ILUNAM,'NAM_SFX_LAKE_CPL',GFOUND,ILUOUT)
+!
+IF (GFOUND) THEN
+   READ(UNIT=ILUNAM,NML=NAM_SFX_LAKE_CPL)
+ELSE
+   WRITE(ILUOUT,*)'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!'
+   WRITE(ILUOUT,*)'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!'
+   WRITE(ILUOUT,*)'NAM_SFX_LAKE_CPL not found : Surfex lake not coupled with ocean model'
+   WRITE(ILUOUT,*)'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!'
+   WRITE(ILUOUT,*)'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!'
+ENDIF
+!
+CALL POSNAM(ILUNAM,'NAM_SFX_WAVE_CPL',GFOUND,ILUOUT)
+!
+IF (GFOUND) THEN
+   READ(UNIT=ILUNAM,NML=NAM_SFX_WAVE_CPL)
+ELSE
+   WRITE(ILUOUT,*)'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!'
+   WRITE(ILUOUT,*)'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!'
+   WRITE(ILUOUT,*)'NAM_SFX_WAVE_CPL not found : Surfex not coupled with wave model'
+   WRITE(ILUOUT,*)'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!'
+   WRITE(ILUOUT,*)'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!'
+ENDIF
+!
+CALL CLOSE_NAMELIST(HPROGRAM,ILUNAM)
+!
+IF(XTSTEP_CPL_LAND>0.0)LCPL_LAND=.TRUE.
+IF(XTSTEP_CPL_LAKE>0.0)LCPL_LAKE=.TRUE.
+IF(XTSTEP_CPL_SEA >0.0)LCPL_SEA =.TRUE.
+IF(XTSTEP_CPL_WAVE>0.0)LCPL_WAVE=.TRUE.
+!
+IF(.NOT.LCPL_LAND.AND..NOT.LCPL_SEA.AND..NOT.LCPL_WAVE)THEN
+  CALL ABOR1_SFX('SFX_OASIS_READ_NAM: OASIS USED BUT NAMELIST NOT FOUND')
+ENDIF
+!
+!-------------------------------------------------------------------------------
+!
+!*       2.     Check time step consistency
+!               ---------------------------
+!
+IF(YINIT/='PRE')THEN
+  IF(MOD(XRUNTIME,PTSTEP_SURF)/=0.)THEN
+    WRITE(ILUOUT,*)'! MOD(XRUNTIME,XTSTEP_SURF)/=0 !!!'     
+    WRITE(ILUOUT,*)'! XTSTEP_SURF (model timestep) must be a multiple of $RUNTIME in oasis namcouple !!!'     
+    CALL ABOR1_SFX('SFX_OASIS_READ_NAM: XTSTEP_SURF must be a multiple of $RUNTIME in oasis namcouple !!!')
+  ENDIF
+ENDIF
+!
+!-------------------------------------------------------------------------------
+!
+!*       3.     Check status for Land surface fields 
+!               ------------------------------------
+!
+IF(LCPL_LAND)THEN
+!
+  IF(YINIT/='PRE')THEN
+    IF(MOD(XTSTEP_CPL_LAND,PTSTEP_SURF)/=0.)THEN
+      WRITE(ILUOUT,*)'! MOD(XTSTEP_SURF,XTSTEP_CPL_LAND) /= 0     !'
+      WRITE(ILUOUT,*)'XTSTEP_SURF =',PTSTEP_SURF,'XTSTEP_CPL_LAND = ',XTSTEP_CPL_LAND
+      IF(PTSTEP_SURF>XTSTEP_CPL_LAND) &
+      WRITE(ILUOUT,*)'! XTSTEP_SURF (model timestep) is superiror to  XTSTEP_CPL_LAND !'         
+      CALL ABOR1_SFX('SFX_OASIS_READ_NAM: XTSTEP_SURF and XTSTEP_CPL_LAND not consistent !!!')
+    ENDIF
+  ENDIF
+!
+! Land Output variable
+!
+  YKEY  ='CRUNOFF'
+  YCOMMENT='Surface runoff'
+  CALL CHECK_FIELD(CRUNOFF,YKEY,YCOMMENT,YLAND,KOUT)
+!
+  YKEY  ='CDRAIN'
+  YCOMMENT='Deep drainage'
+  CALL CHECK_FIELD(CDRAIN,YKEY,YCOMMENT,YLAND,KOUT)
+!
+! Particular case due to calving case
+!
+  IF(LEN_TRIM(CCALVING)>0)THEN
+    LCPL_CALVING = .TRUE.
+  ENDIF
+!
+  IF(LCPL_CALVING)THEN
+    YKEY  ='CCALVING'
+    YCOMMENT='Calving flux'
+    CALL CHECK_FIELD(CCALVING,YKEY,YCOMMENT,YLAND,KOUT)
+  ENDIF
+!
+! Particular case due to water table depth / surface coupling
+!    
+  IF(LEN_TRIM(CWTD)>0.OR.LEN_TRIM(CFWTD)>0.OR.LEN_TRIM(CRECHARGE)>0)THEN
+    LCPL_GW = .TRUE.
+  ENDIF
+!
+  IF(LCPL_GW)THEN
+!
+!   Output variable
+!
+    YKEY  ='CRECHARGE'
+    YCOMMENT='Groundwater recharge'
+    CALL CHECK_FIELD(CRECHARGE,YKEY,YCOMMENT,YLAND,KOUT)
+!
+!   Input variable
+!
+    YKEY  ='CWTD'
+    YCOMMENT='Water table depth'
+    CALL CHECK_FIELD(CWTD,YKEY,YCOMMENT,YLAND,KIN)
+!
+    YKEY  ='CFWTD'
+    YCOMMENT='Fraction of WTD to rise'
+    CALL CHECK_FIELD(CFWTD,YKEY,YCOMMENT,YLAND,KIN)
+!
+  ENDIF
+!
+! Particular case due to floodplains coupling
+!    
+  IF(LEN_TRIM(CSRCFLOOD)>0.OR.LEN_TRIM(CFFLOOD)>0.OR.LEN_TRIM(CPIFLOOD)>0)THEN
+    LCPL_FLOOD = .TRUE.
+  ENDIF
+!
+  IF(LCPL_FLOOD)THEN
+!
+!   Output variable
+!
+    YKEY  ='CSRCFLOOD'
+    YCOMMENT='flood freshwater flux'
+    CALL CHECK_FIELD(CSRCFLOOD,YKEY,YCOMMENT,YLAND,KOUT)
+!
+!   Input variable
+!
+    YKEY  ='CFFLOOD'
+    YCOMMENT='Flood fraction'
+    CALL CHECK_FIELD(CFFLOOD,YKEY,YCOMMENT,YLAND,KIN)
+!
+    YKEY  ='CPIFLOOD'
+    YCOMMENT='Flood potential infiltration'
+    CALL CHECK_FIELD(CPIFLOOD,YKEY,YCOMMENT,YLAND,KIN)
+!
+  ENDIF
+!
+ENDIF
+!
+!-------------------------------------------------------------------------------
+!
+!*       4.     Check status for Land surface fields 
+!               ------------------------------------
+!
+IF(LCPL_LAKE)THEN
+!
+  IF(YINIT/='PRE')THEN
+    IF(MOD(XTSTEP_CPL_LAKE,PTSTEP_SURF)/=0.)THEN
+      WRITE(ILUOUT,*)'! MOD(XTSTEP_SURF,XTSTEP_CPL_LAKE) /= 0     !'
+      WRITE(ILUOUT,*)'XTSTEP_SURF =',PTSTEP_SURF,'XTSTEP_CPL_LAKE = ',XTSTEP_CPL_LAKE
+      IF(PTSTEP_SURF>XTSTEP_CPL_LAKE) &
+      WRITE(ILUOUT,*)'! XTSTEP_SURF (model timestep) is superiror to  XTSTEP_CPL_LAKE !'     
+      CALL ABOR1_SFX('SFX_OASIS_READ_NAM: XTSTEP_SURF and XTSTEP_CPL_LAKE not consistent !!!')          
+    ENDIF
+  ENDIF
+!
+! Output variables
+!
+  YKEY  ='CLAKE_EVAP'
+  YCOMMENT='Evaporation rate'
+  CALL CHECK_FIELD(CLAKE_EVAP,YKEY,YCOMMENT,YLAKE,KOUT)
+!
+  YKEY  ='CLAKE_RAIN'
+  YCOMMENT='Rainfall rate'
+  CALL CHECK_FIELD(CLAKE_RAIN,YKEY,YCOMMENT,YLAKE,KOUT)
+!
+  YKEY  ='CLAKE_SNOW'
+  YCOMMENT='Snowfall rate'
+  CALL CHECK_FIELD(CLAKE_SNOW,YKEY,YCOMMENT,YLAKE,KOUT)
+!
+  YKEY  ='CLAKE_WATF'
+  YCOMMENT='Freshwater flux'
+  CALL CHECK_FIELD(CLAKE_WATF,YKEY,YCOMMENT,YLAKE,KOUT)
+!
+ENDIF
+!
+!-------------------------------------------------------------------------------
+!
+!*       5.     Check status for Sea fields 
+!               ---------------------------
+!
+IF(LCPL_SEA)THEN
+!
+  IF(YINIT/='PRE')THEN
+    IF(MOD(XTSTEP_CPL_SEA,PTSTEP_SURF)/=0.)THEN
+      WRITE(ILUOUT,*)'! MOD(XTSTEP_SURF,XTSTEP_CPL_SEA) /= 0     !'
+      WRITE(ILUOUT,*)'XTSTEP_SURF =',PTSTEP_SURF,'XTSTEP_CPL_SEA = ',XTSTEP_CPL_SEA
+      IF(PTSTEP_SURF>XTSTEP_CPL_SEA) &
+      WRITE(ILUOUT,*)'! XTSTEP_SURF (model timestep) is superiror to  XTSTEP_CPL_SEA !'     
+      CALL ABOR1_SFX('SFX_OASIS_READ_NAM: XTSTEP_SURF and XTSTEP_CPL_SEA not consistent !!!')          
+    ENDIF
+  ENDIF
+!
+! Sea Output variables
+!
+  YKEY  ='CSEA_FWSU'
+  YCOMMENT='zonal wind stress'
+  CALL CHECK_FIELD(CSEA_FWSU,YKEY,YCOMMENT,YSEA,KOUT)
+!
+  YKEY  ='CSEA_FWSV'
+  YCOMMENT='meridian wind stress'
+  CALL CHECK_FIELD(CSEA_FWSV,YKEY,YCOMMENT,YSEA,KOUT)
+!
+  YKEY  ='CSEA_HEAT'
+  YCOMMENT='Non solar net heat flux'
+  CALL CHECK_FIELD(CSEA_HEAT,YKEY,YCOMMENT,YSEA,KOUT)
+!
+  YKEY  ='CSEA_SNET'
+  YCOMMENT='Solar net heat flux'
+  CALL CHECK_FIELD(CSEA_SNET,YKEY,YCOMMENT,YSEA,KOUT)
+!
+  YKEY  ='CSEA_WIND'
+  YCOMMENT='module of 10m wind speed'
+  CALL CHECK_FIELD(CSEA_WIND,YKEY,YCOMMENT,YSEA,KOUT)
+!
+  YKEY  ='CSEA_FWSM'
+  YCOMMENT='module of wind stress'
+  CALL CHECK_FIELD(CSEA_FWSM,YKEY,YCOMMENT,YSEA,KOUT)
+!
+  YKEY  ='CSEA_EVAP'
+  YCOMMENT='Evaporation rate'
+  CALL CHECK_FIELD(CSEA_EVAP,YKEY,YCOMMENT,YSEA,KOUT)
+!
+  YKEY  ='CSEA_RAIN'
+  YCOMMENT='Rainfall rate'
+  CALL CHECK_FIELD(CSEA_RAIN,YKEY,YCOMMENT,YSEA,KOUT)
+!
+  YKEY  ='CSEA_SNOW'
+  YCOMMENT='Snowfall rate'
+  CALL CHECK_FIELD(CSEA_SNOW,YKEY,YCOMMENT,YSEA,KOUT)
+!
+  YKEY  ='CSEA_EVPR'
+  YCOMMENT='Evap. - Precip. rate'
+  CALL CHECK_FIELD(CSEA_EVPR,YKEY,YCOMMENT,YSEA,KOUT)
+!
+  YKEY  ='CSEA_WATF'
+  YCOMMENT='Freshwater flux'
+  CALL CHECK_FIELD(CSEA_WATF,YKEY,YCOMMENT,YSEA,KOUT)
+!
+  YKEY  ='CSEA_PRES'
+  YCOMMENT='Surface pressure'
+  CALL CHECK_FIELD(CSEA_PRES,YKEY,YCOMMENT,YSEA,KOUT)
+!
+! Sea Input variables
+!
+  YKEY  ='CSEA_SST'
+  YCOMMENT='Sea surface temperature'
+  CALL CHECK_FIELD(CSEA_SST,YKEY,YCOMMENT,YSEA,KIN)
+!
+  YKEY  ='CSEA_UCU'
+  YCOMMENT='Sea u-current stress'
+  CALL CHECK_FIELD(CSEA_UCU,YKEY,YCOMMENT,YSEA,KIN)
+!
+  YKEY  ='CSEA_VCU'
+  YCOMMENT='Sea v-current stress'
+  CALL CHECK_FIELD(CSEA_VCU,YKEY,YCOMMENT,YSEA,KIN)
+!
+! Sea-ice fluxes
+!
+  IF(LEN_TRIM(CSEAICE_HEAT)>0.OR.LEN_TRIM(CSEAICE_SNET)>0.OR. &
+     LEN_TRIM(CSEAICE_EVAP)>0.OR.LEN_TRIM(CSEAICE_SIT )>0.OR. &
+     LEN_TRIM(CSEAICE_CVR )>0.OR.LEN_TRIM(CSEAICE_ALB )>0     )THEN
+     LCPL_SEAICE=.TRUE.
+  ENDIF
+!
+  IF(LCPL_SEAICE)THEN
+!
+!   Sea-ice Output variables
+!
+    YKEY  ='CSEAICE_HEAT'
+    YCOMMENT='Sea-ice non solar net heat flux'
+    CALL CHECK_FIELD(CSEAICE_HEAT,YKEY,YCOMMENT,YSEA,KOUT)
+!
+    YKEY  ='CSEAICE_SNET'
+    YCOMMENT='Sea-ice solar net heat flux'
+    CALL CHECK_FIELD(CSEAICE_SNET,YKEY,YCOMMENT,YSEA,KOUT)
+!
+    YKEY  ='CSEAICE_EVAP'
+    YCOMMENT='Sea-ice sublimation'
+    CALL CHECK_FIELD(CSEAICE_EVAP,YKEY,YCOMMENT,YSEA,KOUT)
+!
+!   Sea-ice Input variables
+!
+    YKEY  ='CSEAICE_SIT'
+    YCOMMENT='Sea-ice temperature'
+    CALL CHECK_FIELD(CSEAICE_SIT,YKEY,YCOMMENT,YSEA,KIN)
+!
+    YKEY  ='CSEAICE_CVR'
+    YCOMMENT='Sea-ice cover'
+    CALL CHECK_FIELD(CSEAICE_CVR,YKEY,YCOMMENT,YSEA,KIN)
+!
+    YKEY  ='CSEAICE_ALB'
+    YCOMMENT='Sea-ice albedo'
+    CALL CHECK_FIELD(CSEAICE_ALB,YKEY,YCOMMENT,YSEA,KIN)
+!
+  ENDIF
+!  
+ENDIF
+!
+!-------------------------------------------------------------------------------
+!
+!*       6.     Check status for Wave fields 
+!               ---------------------------
+!
+IF(LCPL_WAVE)THEN
+!
+  IF(YINIT/='PRE')THEN
+    IF(MOD(XTSTEP_CPL_WAVE,PTSTEP_SURF)/=0.)THEN
+      WRITE(ILUOUT,*)'! MOD(XTSTEP_SURF,XTSTEP_CPL_WAVE) /= 0     !'
+      WRITE(ILUOUT,*)'XTSTEP_SURF =',PTSTEP_SURF,'XTSTEP_CPL_WAVE = ',XTSTEP_CPL_WAVE
+      IF(PTSTEP_SURF>XTSTEP_CPL_WAVE) &
+      WRITE(ILUOUT,*)'! XTSTEP_SURF (model timestep) is superiror to  XTSTEP_CPL_WAVE !'
+      CALL ABOR1_SFX('SFX_OASIS_READ_NAM: XTSTEP_SURF and XTSTEP_CPL_WAVE not consistent !!!')
+    ENDIF
+  ENDIF
+!
+! Wave Output variables
+!
+  YKEY  ='CWAVE_U10'
+  YCOMMENT='10m u-wind speed'
+  CALL CHECK_FIELD(CWAVE_U10,YKEY,YCOMMENT,YWAVE,KOUT)
+!
+  YKEY  ='CWAVE_V10'
+  YCOMMENT='10m v-wind speed'
+  CALL CHECK_FIELD(CWAVE_V10,YKEY,YCOMMENT,YWAVE,KOUT)
+!
+! Wave Input variables
+!
+  YKEY  ='CWAVE_CHA'
+  YCOMMENT='Charnock Coefficient'
+  CALL CHECK_FIELD(CWAVE_CHA,YKEY,YCOMMENT,YWAVE,KIN)
+!
+  YKEY  ='CWAVE_UCU'
+  YCOMMENT='u-current velocity'
+  CALL CHECK_FIELD(CWAVE_UCU,YKEY,YCOMMENT,YWAVE,KIN)
+!
+  YKEY  ='CWAVE_VCU'
+  YCOMMENT='v-current velocity'
+  CALL CHECK_FIELD(CWAVE_VCU,YKEY,YCOMMENT,YWAVE,KIN)
+!
+  YKEY  ='CWAVE_HS'
+  YCOMMENT='Significant wave height'
+  CALL CHECK_FIELD(CWAVE_HS,YKEY,YCOMMENT,YWAVE,KIN)
+!
+  YKEY  ='CWAVE_TP'
+  YCOMMENT='Peak period'
+  CALL CHECK_FIELD(CWAVE_TP,YKEY,YCOMMENT,YWAVE,KIN)
+!  
+ENDIF
+!
+IF (LHOOK) CALL DR_HOOK('SFX_OASIS_READ_NAM',1,ZHOOK_HANDLE)
+!
+!-------------------------------------------------------------------------------
+CONTAINS
+!-------------------------------------------------------------------------------
+!
+SUBROUTINE CHECK_FIELD(HFIELD,HKEY,HCOMMENT,HTYP,KID)
+!
+IMPLICIT NONE
+!
+CHARACTER(LEN=*), INTENT(IN) :: HFIELD
+CHARACTER(LEN=*), INTENT(IN) :: HKEY
+CHARACTER(LEN=*), INTENT(IN) :: HCOMMENT
+CHARACTER(LEN=*), INTENT(IN) :: HTYP
+INTEGER,          INTENT(IN) :: KID
+!
+CHARACTER(LEN=20)  :: YWORK
+CHARACTER(LEN=20)  :: YNAMELIST
+CHARACTER(LEN=128) :: YCOMMENT1
+CHARACTER(LEN=128) :: YCOMMENT2
+LOGICAL            :: LSTOP
+!
+REAL(KIND=JPRB) :: ZHOOK_HANDLE
+!
+IF (LHOOK) CALL DR_HOOK('SFX_OASIS_READ_NAM:CHECK_FIELD',0,ZHOOK_HANDLE)
+!
+IF(LEN_TRIM(HFIELD)==0)THEN
+!
+  IF(KID==0)THEN
+    YWORK=TRIM(HTYP)//' - SFX'
+  ELSE
+    YWORK='SFX - '//TRIM(HTYP)
+  ENDIF
+!
+  SELECT CASE (HTYP)
+     CASE(YLAND)
+          YNAMELIST='NAM_SFX_LAND_CPL'
+     CASE(YSEA)
+          YNAMELIST='NAM_SFX_SEA_CPL'
+     CASE(YLAKE)
+          YNAMELIST='NAM_SFX_LAKE_CPL'          
+     CASE(YWAVE)
+          YNAMELIST='NAM_SFX_WAVE_CPL'
+     CASE DEFAULT
+          CALL ABOR1_SFX('SFX_OASIS_READ_NAM: TYPE NOT SUPPORTED OR IMPLEMENTD : '//TRIM(HTYP))               
+  END SELECT
+!
+  YCOMMENT1= 'SFX_OASIS_READ_NAM: '//TRIM(HCOMMENT)//' is not done for '//TRIM(YWORK)//' coupling'
+  YCOMMENT2= 'SFX_OASIS_READ_NAM: Namelist key '//TRIM(HKEY)//' is not in '//TRIM(YNAMELIST)
+!
+  WRITE(ILUOUT,*)TRIM(YCOMMENT1)
+  WRITE(ILUOUT,*)TRIM(YCOMMENT2)
+!
+! For oceanic and wave coupling do not stop the model if a field from surfex to ocean/wave is
+! not done because many particular case can be used
+!
+  IF((KID==0.OR.KID==1).AND.HTYP/=YLAND)THEN
+    LSTOP=.FALSE.
+  ELSE
+    LSTOP=.TRUE.
+  ENDIF
+!
+  IF(LSTOP)THEN
+    CALL ABOR1_SFX(YCOMMENT1)
+  ENDIF
+!  
+ENDIF
+!
+IF (LHOOK) CALL DR_HOOK('SFX_OASIS_READ_NAM:CHECK_FIELD',1,ZHOOK_HANDLE)
+!
+END SUBROUTINE CHECK_FIELD
+!
+!-------------------------------------------------------------------------------
+!
+END SUBROUTINE SFX_OASIS_READ_NAM
diff --git a/src/ARCH_SRC/CPL_WAVE/SURFEX/sfx_oasis_recv.F90 b/src/ARCH_SRC/CPL_WAVE/SURFEX/sfx_oasis_recv.F90
new file mode 100755
index 0000000000000000000000000000000000000000..bb174e0319ec7dcd5e7c3dcd1bcb747da40f19e3
--- /dev/null
+++ b/src/ARCH_SRC/CPL_WAVE/SURFEX/sfx_oasis_recv.F90
@@ -0,0 +1,327 @@
+!SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence
+!SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!SFX_LIC for details. version 1.
+!#########
+SUBROUTINE SFX_OASIS_RECV(HPROGRAM,KI,KSW,PTIMEC,                &
+                          ORECV_LAND, ORECV_SEA, ORECV_WAVE,     &
+                          PLAND_WTD,PLAND_FWTD,                  &
+                          PLAND_FFLOOD,PLAND_PIFLOOD,            &
+                          PSEA_SST,PSEA_UCU,PSEA_VCU,            &
+                          PSEAICE_SIT,PSEAICE_CVR,PSEAICE_ALB,   &
+                          PWAVE_CHA,PWAVE_UCU,PWAVE_VCU,         &
+                          PWAVE_HS,PWAVE_TP             )
+!########################################
+!
+!!****  *SFX_OASIS_RECV* - Receive coupling fields from oasis
+!!
+!!    PURPOSE
+!!    -------
+!!
+!!**  METHOD
+!!    ------
+!!
+!!    EXTERNAL
+!!    --------
+!!
+!!
+!!    IMPLICIT ARGUMENTS
+!!    ------------------
+!!
+!!    REFERENCE
+!!    ---------
+!!
+!!
+!!    AUTHOR
+!!    ------
+!!      B. Decharme   *Meteo France*
+!!
+!!    MODIFICATIONS
+!!    -------------
+!!      Original    10/2013
+!!      Modified    11/2014 : J. Pianezze - add wave coupling parameters
+!!
+!-------------------------------------------------------------------------------
+!
+!*       0.    DECLARATIONS
+!              ------------
+!
+USE MODD_SURF_PAR,   ONLY : XUNDEF, NUNDEF
+!
+USE MODD_SFX_OASIS
+!
+USE MODD_SGH_PAR,    ONLY :
+!
+USE MODI_GET_LUOUT
+!
+USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
+USE PARKIND1  ,ONLY : JPRB
+!
+#ifdef CPLOASIS
+USE MOD_OASIS
+#endif
+!
+IMPLICIT NONE
+!
+!*       0.1   Declarations of arguments
+!              -------------------------
+!
+CHARACTER(LEN=*),       INTENT(IN)  :: HPROGRAM  ! program calling surf. schemes
+INTEGER,                INTENT(IN)  :: KI        ! number of points on this proc
+INTEGER,                INTENT(IN)  :: KSW       ! number of short-wave spectral bands
+REAL,                   INTENT(IN)  :: PTIMEC    ! Cumulated run time step (s)
+!
+LOGICAL,                INTENT(IN)  :: ORECV_LAND
+LOGICAL,                INTENT(IN)  :: ORECV_SEA
+LOGICAL,                INTENT(IN)  :: ORECV_WAVE
+!
+REAL, DIMENSION(KI),    INTENT(OUT) :: PLAND_WTD     ! Land water table depth (m)
+REAL, DIMENSION(KI),    INTENT(OUT) :: PLAND_FWTD    ! Land grid-cell fraction of water table rise (-)
+REAL, DIMENSION(KI),    INTENT(OUT) :: PLAND_FFLOOD  ! Land Floodplains fraction (-)
+REAL, DIMENSION(KI),    INTENT(OUT) :: PLAND_PIFLOOD ! Land Potential flood infiltration (kg/m2/s)
+!
+REAL, DIMENSION(KI),    INTENT(OUT) :: PSEA_SST ! Sea surface temperature (K)
+REAL, DIMENSION(KI),    INTENT(OUT) :: PSEA_UCU ! Sea u-current stress (Pa)
+REAL, DIMENSION(KI),    INTENT(OUT) :: PSEA_VCU ! Sea v-current stress (Pa)
+!
+REAL, DIMENSION(KI),    INTENT(OUT) :: PSEAICE_SIT ! Sea-ice Temperature (K)
+REAL, DIMENSION(KI),    INTENT(OUT) :: PSEAICE_CVR ! Sea-ice cover (-)
+REAL, DIMENSION(KI),    INTENT(OUT) :: PSEAICE_ALB ! Sea-ice albedo (-)
+!
+REAL, DIMENSION(KI),    INTENT(OUT) :: PWAVE_CHA ! Charnock coefficient (-)
+REAL, DIMENSION(KI),    INTENT(OUT) :: PWAVE_UCU ! u-current velocity (m/s)
+REAL, DIMENSION(KI),    INTENT(OUT) :: PWAVE_VCU ! v-current velocity (m/s)
+REAL, DIMENSION(KI),    INTENT(OUT) :: PWAVE_HS  ! Significant wave height (m)
+REAL, DIMENSION(KI),    INTENT(OUT) :: PWAVE_TP  ! Peak period (s)
+!
+!*       0.2   Declarations of local variables
+!              -------------------------------
+!
+REAL, DIMENSION(KI,1) :: ZREAD
+!
+INTEGER               :: IDATE  ! current coupling time step (s)
+INTEGER               :: IERR   ! Error info
+INTEGER               :: ILUOUT
+CHARACTER(LEN=50)     :: YCOMMENT
+!
+REAL(KIND=JPRB) :: ZHOOK_HANDLE
+!
+!-------------------------------------------------------------------------------
+#ifdef CPLOASIS
+!-------------------------------------------------------------------------------
+!
+IF (LHOOK) CALL DR_HOOK('SFX_OASIS_RECV',0,ZHOOK_HANDLE)
+!
+!*       1.     Initialize :
+!               ------------
+!
+CALL GET_LUOUT(HPROGRAM,ILUOUT)
+!
+IDATE = INT(PTIMEC)
+!
+!-------------------------------------------------------------------------------
+!
+!*       2.     Get Land surface variable :
+!               ------------------------------------
+!
+IF(ORECV_LAND)THEN
+!
+! * Init river input fields
+!
+  ZREAD(:,:) = XUNDEF
+!
+  PLAND_WTD    (:) = XUNDEF
+  PLAND_FWTD   (:) = XUNDEF
+  PLAND_FFLOOD (:) = XUNDEF
+  PLAND_PIFLOOD(:) = XUNDEF
+!
+! * Receive river input fields
+!
+  IF(LCPL_GW)THEN
+!
+    YCOMMENT='water table depth'
+    CALL OASIS_GET(NWTD_ID,IDATE,ZREAD(:,:),IERR)
+    CALL CHECK_RECV(ILUOUT,IERR,YCOMMENT)
+    PLAND_WTD(:)=ZREAD(:,1)
+!
+    YCOMMENT='fraction of water table rise'
+    CALL OASIS_GET(NFWTD_ID,IDATE,ZREAD(:,:),IERR)
+    CALL CHECK_RECV(ILUOUT,IERR,YCOMMENT)
+    PLAND_FWTD(:)=ZREAD(:,1)
+!
+  ENDIF
+!
+  IF(LCPL_FLOOD)THEN
+!
+    YCOMMENT='Flood fraction'
+    CALL OASIS_GET(NFFLOOD_ID,IDATE,ZREAD(:,:),IERR)
+    CALL CHECK_RECV(ILUOUT,IERR,YCOMMENT)
+    PLAND_FFLOOD(:)=ZREAD(:,1)
+!
+    YCOMMENT='Potential flood infiltration'
+    CALL OASIS_GET(NPIFLOOD_ID,IDATE,ZREAD(:,:),IERR)
+    CALL CHECK_RECV(ILUOUT,IERR,YCOMMENT)
+    PLAND_PIFLOOD(:)=ZREAD(:,1)
+!
+    WHERE(PLAND_PIFLOOD(:)==0.0)PLAND_FFLOOD(:)=0.0
+!
+  ENDIF
+!
+ENDIF
+!
+!-------------------------------------------------------------------------------
+!
+!*       3.     Get Sea variables :
+!               -----------------------------
+!
+!
+IF(ORECV_SEA)THEN
+!
+! * Init ocean input fields
+!
+  ZREAD(:,:) = XUNDEF
+!
+  PSEA_SST (:) = XUNDEF
+  PSEA_UCU (:) = XUNDEF
+  PSEA_VCU (:) = XUNDEF
+!
+  PSEAICE_SIT (:) = XUNDEF
+  PSEAICE_CVR (:) = XUNDEF
+  PSEAICE_ALB (:) = XUNDEF
+!
+! * Receive ocean input fields
+!
+  IF(NSEA_SST_ID/=NUNDEF)THEN
+    YCOMMENT='Sea surface temperature'
+    CALL OASIS_GET(NSEA_SST_ID,IDATE,ZREAD(:,:),IERR)
+    CALL CHECK_RECV(ILUOUT,IERR,YCOMMENT)
+    PSEA_SST(:)=ZREAD(:,1)
+  ENDIF
+!
+  IF(NSEA_UCU_ID/=NUNDEF)THEN
+    YCOMMENT='Sea u-current stress'
+    CALL OASIS_GET(NSEA_UCU_ID,IDATE,ZREAD(:,:),IERR)
+    CALL CHECK_RECV(ILUOUT,IERR,YCOMMENT)
+    PSEA_UCU(:)=ZREAD(:,1)
+  ENDIF
+!
+  IF(NSEA_VCU_ID/=NUNDEF)THEN
+    YCOMMENT='Sea v-current stress'
+    CALL OASIS_GET(NSEA_VCU_ID,IDATE,ZREAD(:,:),IERR)
+    CALL CHECK_RECV(ILUOUT,IERR,YCOMMENT)
+    PSEA_VCU(:)=ZREAD(:,1)
+  ENDIF
+!
+  IF(LCPL_SEAICE)THEN
+!
+    YCOMMENT='Sea-ice Temperature'
+    CALL OASIS_GET(NSEAICE_SIT_ID,IDATE,ZREAD(:,:),IERR)
+    CALL CHECK_RECV(ILUOUT,IERR,YCOMMENT)
+    PSEAICE_SIT(:)=ZREAD(:,1)
+!
+    YCOMMENT='Sea-ice cover'
+    CALL OASIS_GET(NSEAICE_CVR_ID,IDATE,ZREAD(:,:),IERR)
+    CALL CHECK_RECV(ILUOUT,IERR,YCOMMENT)
+    PSEAICE_CVR(:)=ZREAD(:,1)
+!
+    YCOMMENT='Sea-ice albedo'
+    CALL OASIS_GET(NSEAICE_ALB_ID,IDATE,ZREAD(:,:),IERR)
+    CALL CHECK_RECV(ILUOUT,IERR,YCOMMENT)
+    PSEAICE_ALB(:)=ZREAD(:,1)
+!
+  ENDIF
+!
+ENDIF
+!
+!-------------------------------------------------------------------------------
+!
+!*       4.     Get Wave variables :
+!               -----------------------------
+!
+!
+IF(ORECV_WAVE)THEN
+!
+! * Init ocean input fields
+!
+  ZREAD(:,:) = XUNDEF
+!
+  PWAVE_CHA (:) = XUNDEF
+  PWAVE_UCU  (:) = XUNDEF
+  PWAVE_VCU  (:) = XUNDEF
+  PWAVE_HS  (:) = XUNDEF
+  PWAVE_TP  (:) = XUNDEF
+!
+! * Receive wave input fields
+!
+  IF(NWAVE_CHA_ID/=NUNDEF)THEN
+    YCOMMENT='Charnock coefficient'
+    CALL OASIS_GET(NWAVE_CHA_ID,IDATE,ZREAD(:,:),IERR)
+    CALL CHECK_RECV(ILUOUT,IERR,YCOMMENT)
+    PWAVE_CHA(:)=ZREAD(:,1)
+  ENDIF
+!
+  IF(NWAVE_UCU_ID/=NUNDEF)THEN
+    YCOMMENT='u-current velocity'
+    CALL OASIS_GET(NWAVE_UCU_ID,IDATE,ZREAD(:,:),IERR)
+    CALL CHECK_RECV(ILUOUT,IERR,YCOMMENT)
+    PWAVE_UCU(:)=ZREAD(:,1)
+  ENDIF
+!
+  IF(NWAVE_VCU_ID/=NUNDEF)THEN
+    YCOMMENT='v-current velocity'
+    CALL OASIS_GET(NWAVE_VCU_ID,IDATE,ZREAD(:,:),IERR)
+    CALL CHECK_RECV(ILUOUT,IERR,YCOMMENT)
+    PWAVE_VCU(:)=ZREAD(:,1)
+  ENDIF
+!
+  IF(NWAVE_HS_ID/=NUNDEF)THEN
+    YCOMMENT='Significant wave height'
+    CALL OASIS_GET(NWAVE_HS_ID,IDATE,ZREAD(:,:),IERR)
+    CALL CHECK_RECV(ILUOUT,IERR,YCOMMENT)
+    PWAVE_HS(:)=ZREAD(:,1)
+  ENDIF
+!
+  IF(NWAVE_TP_ID/=NUNDEF)THEN
+    YCOMMENT='Peak period'
+    CALL OASIS_GET(NWAVE_TP_ID,IDATE,ZREAD(:,:),IERR)
+    CALL CHECK_RECV(ILUOUT,IERR,YCOMMENT)
+    PWAVE_TP(:)=ZREAD(:,1)
+  ENDIF
+!
+ENDIF
+!-------------------------------------------------------------------------------
+!
+IF (LHOOK) CALL DR_HOOK('SFX_OASIS_RECV',1,ZHOOK_HANDLE)
+!
+!-------------------------------------------------------------------------------
+CONTAINS
+!-------------------------------------------------------------------------------
+!
+SUBROUTINE CHECK_RECV(KLUOUT,KERR,HCOMMENT)
+!
+USE MODI_ABOR1_SFX
+!
+IMPLICIT NONE
+!
+INTEGER,          INTENT(IN)  :: KLUOUT
+INTEGER,          INTENT(IN)  :: KERR
+ CHARACTER(LEN=*), INTENT(IN)  :: HCOMMENT
+!
+REAL(KIND=JPRB) :: ZHOOK_HANDLE
+!
+IF (LHOOK) CALL DR_HOOK('SFX_OASIS_RECV:CHECK_RECV',0,ZHOOK_HANDLE)
+!
+IF (KERR/=OASIS_OK.AND.KERR<OASIS_RECVD) THEN
+   WRITE(KLUOUT,'(A,I4)')'Return OASIS code receiving '//TRIM(HCOMMENT)//' : ',KERR
+   CALL ABOR1_SFX('SFX_OASIS_RECV: problem receiving '//TRIM(HCOMMENT)//' from OASIS')
+ENDIF
+!
+IF (LHOOK) CALL DR_HOOK('SFX_OASIS_RECV:CHECK_RECV',1,ZHOOK_HANDLE)
+!
+END SUBROUTINE CHECK_RECV
+!
+!-------------------------------------------------------------------------------
+#endif
+!-------------------------------------------------------------------------------
+!
+END SUBROUTINE SFX_OASIS_RECV
diff --git a/src/ARCH_SRC/CPL_WAVE/SURFEX/sfx_oasis_send.F90 b/src/ARCH_SRC/CPL_WAVE/SURFEX/sfx_oasis_send.F90
new file mode 100755
index 0000000000000000000000000000000000000000..013350350f299943eea681e66d60b3df22b1989b
--- /dev/null
+++ b/src/ARCH_SRC/CPL_WAVE/SURFEX/sfx_oasis_send.F90
@@ -0,0 +1,423 @@
+!SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence
+!SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!SFX_LIC for details. version 1.
+!#########
+SUBROUTINE SFX_OASIS_SEND(KLUOUT,KI,KDATE,OSEND_LAND,OSEND_LAKE,OSEND_SEA,OSEND_WAVE,  &
+                          PLAND_RUNOFF,PLAND_DRAIN,PLAND_CALVING,PLAND_RECHARGE,&
+                          PLAND_SRCFLOOD,                                       &
+                          PLAKE_EVAP,PLAKE_RAIN,PLAKE_SNOW,PLAKE_WATF,          &
+                          PSEA_FWSU,PSEA_FWSV,PSEA_HEAT,PSEA_SNET,PSEA_WIND,    &
+                          PSEA_FWSM,PSEA_EVAP,PSEA_RAIN,PSEA_SNOW,PSEA_EVPR,    &
+                          PSEA_WATF,PSEA_PRES,PSEAICE_HEAT,PSEAICE_SNET,        &
+                          PSEAICE_EVAP,PWAVE_U10,PWAVE_V10      )
+!###########################################
+!
+!!****  *SFX_OASIS_SEND* - Send coupling fields
+!!
+!!    PURPOSE
+!!    -------
+!!
+!!    Attention : all fields are sent in Pa, m/s, W/m2 or kg/m2/s
+!!   
+!!
+!!
+!!**  METHOD
+!!    ------
+!!
+!!    EXTERNAL
+!!    --------
+!!
+!!
+!!    IMPLICIT ARGUMENTS
+!!    ------------------
+!!
+!!    REFERENCE
+!!    ---------
+!!
+!!
+!!    AUTHOR
+!!    ------
+!!	B. Decharme   *Meteo France*	
+!!
+!!    MODIFICATIONS
+!!    -------------
+!!      Original    10/2013
+!!      Modified    11/2014 : J. Pianezze - add wave coupling parameters
+!!                                          and surface pressure for ocean coupling
+!-------------------------------------------------------------------------------
+!
+!*       0.    DECLARATIONS
+!              ------------
+!
+USE MODN_SFX_OASIS,  ONLY : XTSTEP_CPL_SEA, XTSTEP_CPL_WAVE, XTSTEP_CPL_LAKE, &
+                            XTSTEP_CPL_LAND
+!                    
+USE MODD_SURF_PAR,   ONLY : XUNDEF, NUNDEF
+!
+USE MODD_SFX_OASIS
+!
+USE MODI_GET_LUOUT
+!
+USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
+USE PARKIND1  ,ONLY : JPRB
+!
+#ifdef CPLOASIS
+USE MOD_OASIS
+#endif
+!
+IMPLICIT NONE
+!
+!*       0.1   Declarations of arguments
+!              -------------------------
+!
+INTEGER,             INTENT(IN) :: KLUOUT
+INTEGER,             INTENT(IN) :: KI            ! number of points
+INTEGER,             INTENT(IN) :: KDATE  ! current coupling time step (s)
+LOGICAL,             INTENT(IN) :: OSEND_LAND
+LOGICAL,             INTENT(IN) :: OSEND_LAKE
+LOGICAL,             INTENT(IN) :: OSEND_SEA
+LOGICAL,             INTENT(IN) :: OSEND_WAVE
+!
+REAL, DIMENSION(KI), INTENT(IN) :: PLAND_RUNOFF    ! Cumulated Surface runoff             (kg/m2)
+REAL, DIMENSION(KI), INTENT(IN) :: PLAND_DRAIN     ! Cumulated Deep drainage              (kg/m2)
+REAL, DIMENSION(KI), INTENT(IN) :: PLAND_CALVING   ! Cumulated Calving flux               (kg/m2)
+REAL, DIMENSION(KI), INTENT(IN) :: PLAND_RECHARGE  ! Cumulated Recharge to groundwater    (kg/m2)
+REAL, DIMENSION(KI), INTENT(IN) :: PLAND_SRCFLOOD  ! Cumulated flood freshwater flux      (kg/m2)
+!
+REAL, DIMENSION(KI), INTENT(IN) :: PLAKE_EVAP  ! Cumulated Evaporation              (kg/m2)
+REAL, DIMENSION(KI), INTENT(IN) :: PLAKE_RAIN  ! Cumulated Rainfall rate            (kg/m2)
+REAL, DIMENSION(KI), INTENT(IN) :: PLAKE_SNOW  ! Cumulated Snowfall rate            (kg/m2)
+REAL, DIMENSION(KI), INTENT(IN) :: PLAKE_WATF  ! Cumulated freshwater flux          (kg/m2)
+!
+REAL, DIMENSION(KI), INTENT(IN) :: PSEA_FWSU  ! Cumulated zonal wind stress       (Pa.s)
+REAL, DIMENSION(KI), INTENT(IN) :: PSEA_FWSV  ! Cumulated meridian wind stress    (Pa.s)
+REAL, DIMENSION(KI), INTENT(IN) :: PSEA_HEAT  ! Cumulated Non solar net heat flux (J/m2)
+REAL, DIMENSION(KI), INTENT(IN) :: PSEA_SNET  ! Cumulated Solar net heat flux     (J/m2)
+REAL, DIMENSION(KI), INTENT(IN) :: PSEA_WIND  ! Cumulated 10m wind speed          (m)
+REAL, DIMENSION(KI), INTENT(IN) :: PSEA_FWSM  ! Cumulated wind stress             (Pa.s)
+REAL, DIMENSION(KI), INTENT(IN) :: PSEA_EVAP  ! Cumulated Evaporation             (kg/m2)
+REAL, DIMENSION(KI), INTENT(IN) :: PSEA_RAIN  ! Cumulated Rainfall rate           (kg/m2)
+REAL, DIMENSION(KI), INTENT(IN) :: PSEA_SNOW  ! Cumulated Snowfall rate           (kg/m2)
+REAL, DIMENSION(KI), INTENT(IN) :: PSEA_EVPR  ! Evap. - Precip. rate              (kg/m2)
+REAL, DIMENSION(KI), INTENT(IN) :: PSEA_WATF  ! Cumulated freshwater flux         (kg/m2)
+REAL, DIMENSION(KI), INTENT(IN) :: PSEA_PRES  ! Cumulated Surface pressure        (Pa.s)
+!
+REAL, DIMENSION(KI), INTENT(IN) :: PSEAICE_HEAT ! Cumulated Sea-ice non solar net heat flux (J/m2)
+REAL, DIMENSION(KI), INTENT(IN) :: PSEAICE_SNET ! Cumulated Sea-ice solar net heat flux     (J/m2)
+REAL, DIMENSION(KI), INTENT(IN) :: PSEAICE_EVAP ! Cumulated Sea-ice sublimation             (kg/m2)
+!
+REAL, DIMENSION(KI), INTENT(IN) :: PWAVE_U10  ! 
+REAL, DIMENSION(KI), INTENT(IN) :: PWAVE_V10  !
+!
+!*       0.2   Declarations of local variables
+!              -------------------------------
+!
+REAL, DIMENSION(KI,1) :: ZWRITE ! Mean flux send to OASIS (Pa, m/s, W/m2 or kg/m2/s)
+!
+CHARACTER(LEN=50)     :: YCOMMENT
+INTEGER               :: IERR   ! Error info
+!
+REAL(KIND=JPRB) :: ZHOOK_HANDLE
+!
+!-------------------------------------------------------------------------------
+#ifdef CPLOASIS
+!-------------------------------------------------------------------------------
+!
+IF (LHOOK) CALL DR_HOOK('SFX_OASIS_SEND',0,ZHOOK_HANDLE)
+!
+!*       1.     Initialize :
+!               ------------
+!
+ZWRITE(:,:) = XUNDEF
+!
+!-------------------------------------------------------------------------------
+!
+!*       2.     Send land fields to OASIS:
+!               --------------------------
+!
+IF(OSEND_LAND)THEN
+!
+! * Send river output fields
+!
+  YCOMMENT='Surface runoff over land'
+  CALL OUTVAR(PLAND_RUNOFF,XTSTEP_CPL_LAND,ZWRITE(:,1))
+  CALL OASIS_PUT(NRUNOFF_ID,KDATE,ZWRITE(:,:),IERR)
+  CALL CHECK_SFX_SEND(KLUOUT,IERR,YCOMMENT,ZWRITE(:,1))
+!
+  YCOMMENT='Deep drainage over land'
+  CALL OUTVAR(PLAND_DRAIN,XTSTEP_CPL_LAND,ZWRITE(:,1))
+  CALL OASIS_PUT(NDRAIN_ID,KDATE,ZWRITE(:,:),IERR)
+  CALL CHECK_SFX_SEND(KLUOUT,IERR,YCOMMENT,ZWRITE(:,1))
+!
+  IF(LCPL_CALVING)THEN
+    YCOMMENT='calving flux over land'
+    CALL OUTVAR(PLAND_CALVING,XTSTEP_CPL_LAND,ZWRITE(:,1))
+    CALL OASIS_PUT(NCALVING_ID,KDATE,ZWRITE(:,:),IERR)
+    CALL CHECK_SFX_SEND(KLUOUT,IERR,YCOMMENT,ZWRITE(:,1))
+  ENDIF
+!
+  IF(LCPL_GW)THEN
+    YCOMMENT='groundwater recharge over land'
+    CALL OUTVAR(PLAND_RECHARGE,XTSTEP_CPL_LAND,ZWRITE(:,1))
+    CALL OASIS_PUT(NRECHARGE_ID,KDATE,ZWRITE(:,:),IERR)
+    CALL CHECK_SFX_SEND(KLUOUT,IERR,YCOMMENT,ZWRITE(:,1))
+  ENDIF
+!
+  IF(LCPL_FLOOD)THEN      
+    YCOMMENT='flood freshwater flux over land (P-E-I)'
+    CALL OUTVAR(PLAND_SRCFLOOD,XTSTEP_CPL_LAND,ZWRITE(:,1))
+    CALL OASIS_PUT(NSRCFLOOD_ID,KDATE,ZWRITE(:,:),IERR)
+    CALL CHECK_SFX_SEND(KLUOUT,IERR,YCOMMENT,ZWRITE(:,1)) 
+  ENDIF
+!
+ENDIF
+!
+!-------------------------------------------------------------------------------
+!
+!*       3.     Send lake fields to OASIS :
+!               --------------------------
+IF(OSEND_LAKE)THEN
+!
+! * Send output fields (in kg/m2/s)
+!
+  IF(NLAKE_EVAP_ID/=NUNDEF)THEN
+    YCOMMENT='Evaporation over lake'
+    CALL OUTVAR(PLAKE_EVAP,XTSTEP_CPL_LAKE,ZWRITE(:,1))
+    CALL OASIS_PUT(NLAKE_EVAP_ID,KDATE,ZWRITE(:,:),IERR)
+    CALL CHECK_SFX_SEND(KLUOUT,IERR,YCOMMENT,ZWRITE(:,1))
+  ENDIF
+!
+  IF(NLAKE_RAIN_ID/=NUNDEF)THEN
+    YCOMMENT='Rainfall rate over lake'
+    CALL OUTVAR(PLAKE_RAIN,XTSTEP_CPL_LAKE,ZWRITE(:,1))
+    CALL OASIS_PUT(NLAKE_RAIN_ID,KDATE,ZWRITE(:,:),IERR)
+    CALL CHECK_SFX_SEND(KLUOUT,IERR,YCOMMENT,ZWRITE(:,1))
+  ENDIF
+!
+  IF(NLAKE_SNOW_ID/=NUNDEF)THEN
+    YCOMMENT='Snowfall rate over lake'
+    CALL OUTVAR(PLAKE_SNOW,XTSTEP_CPL_LAKE,ZWRITE(:,1))
+    CALL OASIS_PUT(NLAKE_SNOW_ID,KDATE,ZWRITE(:,:),IERR)
+    CALL CHECK_SFX_SEND(KLUOUT,IERR,YCOMMENT,ZWRITE(:,1))
+  ENDIF
+!
+  IF(NLAKE_WATF_ID/=NUNDEF)THEN
+    YCOMMENT='Freshwater flux over lake (P-E)'
+    CALL OUTVAR(PLAKE_WATF,XTSTEP_CPL_LAKE,ZWRITE(:,1))
+    CALL OASIS_PUT(NLAKE_WATF_ID,KDATE,ZWRITE(:,:),IERR)
+    CALL CHECK_SFX_SEND(KLUOUT,IERR,YCOMMENT,ZWRITE(:,1))
+  ENDIF
+
+
+ENDIF
+!
+!-------------------------------------------------------------------------------
+!
+!*       4.     Send sea fields to OASIS :
+!               --------------------------
+!
+IF(OSEND_SEA)THEN
+!
+! * Send sea output fields (in Pa, m/s, W/m2 or kg/m2/s)
+!
+  IF(NSEA_FWSU_ID/=NUNDEF)THEN
+    YCOMMENT='zonal wind stress over sea'
+    CALL OUTVAR(PSEA_FWSU,XTSTEP_CPL_SEA,ZWRITE(:,1))
+    CALL OASIS_PUT(NSEA_FWSU_ID,KDATE,ZWRITE(:,:),IERR)
+    CALL CHECK_SFX_SEND(KLUOUT,IERR,YCOMMENT,ZWRITE(:,1))
+  ENDIF
+!
+  IF(NSEA_FWSV_ID/=NUNDEF)THEN
+    YCOMMENT='meridian wind stress over sea'
+    CALL OUTVAR(PSEA_FWSV,XTSTEP_CPL_SEA,ZWRITE(:,1))
+    CALL OASIS_PUT(NSEA_FWSV_ID,KDATE,ZWRITE(:,:),IERR)
+    CALL CHECK_SFX_SEND(KLUOUT,IERR,YCOMMENT,ZWRITE(:,1))
+  ENDIF
+!
+  IF(NSEA_HEAT_ID/=NUNDEF)THEN
+    YCOMMENT='Non solar net heat flux over sea'
+    CALL OUTVAR(PSEA_HEAT,XTSTEP_CPL_SEA,ZWRITE(:,1))
+    CALL OASIS_PUT(NSEA_HEAT_ID,KDATE,ZWRITE(:,:),IERR)
+    CALL CHECK_SFX_SEND(KLUOUT,IERR,YCOMMENT,ZWRITE(:,1))
+  ENDIF
+!
+  IF(NSEA_SNET_ID/=NUNDEF)THEN
+    YCOMMENT='Solar net heat flux over sea'
+    CALL OUTVAR(PSEA_SNET,XTSTEP_CPL_SEA,ZWRITE(:,1))
+    CALL OASIS_PUT(NSEA_SNET_ID,KDATE,ZWRITE(:,:),IERR)
+    CALL CHECK_SFX_SEND(KLUOUT,IERR,YCOMMENT,ZWRITE(:,1))
+  ENDIF
+!
+  IF(NSEA_WIND_ID/=NUNDEF)THEN
+    YCOMMENT='10m wind speed over sea'
+    CALL OUTVAR(PSEA_WIND,XTSTEP_CPL_SEA,ZWRITE(:,1))
+    CALL OASIS_PUT(NSEA_WIND_ID,KDATE,ZWRITE(:,:),IERR)
+    CALL CHECK_SFX_SEND(KLUOUT,IERR,YCOMMENT,ZWRITE(:,1))
+  ENDIF
+!
+  IF(NSEA_FWSM_ID/=NUNDEF)THEN
+    YCOMMENT='wind stress over sea'
+    CALL OUTVAR(PSEA_FWSM,XTSTEP_CPL_SEA,ZWRITE(:,1))
+    CALL OASIS_PUT(NSEA_FWSM_ID,KDATE,ZWRITE(:,:),IERR)
+    CALL CHECK_SFX_SEND(KLUOUT,IERR,YCOMMENT,ZWRITE(:,1))
+  ENDIF
+!
+  IF(NSEA_EVAP_ID/=NUNDEF)THEN
+    YCOMMENT='Evaporation over sea'
+    CALL OUTVAR(PSEA_EVAP,XTSTEP_CPL_SEA,ZWRITE(:,1))
+    CALL OASIS_PUT(NSEA_EVAP_ID,KDATE,ZWRITE(:,:),IERR)
+    CALL CHECK_SFX_SEND(KLUOUT,IERR,YCOMMENT,ZWRITE(:,1))
+  ENDIF
+!
+  IF(NSEA_RAIN_ID/=NUNDEF)THEN
+    YCOMMENT='Rainfall rate over sea'
+    CALL OUTVAR(PSEA_RAIN,XTSTEP_CPL_SEA,ZWRITE(:,1))
+    CALL OASIS_PUT(NSEA_RAIN_ID,KDATE,ZWRITE(:,:),IERR)
+    CALL CHECK_SFX_SEND(KLUOUT,IERR,YCOMMENT,ZWRITE(:,1))
+  ENDIF
+!
+  IF(NSEA_SNOW_ID/=NUNDEF)THEN
+    YCOMMENT='Snowfall rate over sea'
+    CALL OUTVAR(PSEA_SNOW,XTSTEP_CPL_SEA,ZWRITE(:,1))
+    CALL OASIS_PUT(NSEA_SNOW_ID,KDATE,ZWRITE(:,:),IERR)
+    CALL CHECK_SFX_SEND(KLUOUT,IERR,YCOMMENT,ZWRITE(:,1))
+  ENDIF
+!
+  IF(NSEA_EVPR_ID/=NUNDEF)THEN
+    YCOMMENT='Evap. - Precip. rate over sea'
+    CALL OUTVAR(PSEA_EVPR,XTSTEP_CPL_SEA,ZWRITE(:,1))
+    CALL OASIS_PUT(NSEA_EVPR_ID,KDATE,ZWRITE(:,:),IERR)
+    CALL CHECK_SFX_SEND(KLUOUT,IERR,YCOMMENT,ZWRITE(:,1))
+  ENDIF
+!
+  IF(NSEA_WATF_ID/=NUNDEF)THEN
+    YCOMMENT='Freshwater flux over sea (P-E)'
+    CALL OUTVAR(PSEA_WATF,XTSTEP_CPL_SEA,ZWRITE(:,1))
+    CALL OASIS_PUT(NSEA_WATF_ID,KDATE,ZWRITE(:,:),IERR)
+    CALL CHECK_SFX_SEND(KLUOUT,IERR,YCOMMENT,ZWRITE(:,1))
+  ENDIF
+!
+  IF(NSEA_PRES_ID/=NUNDEF)THEN
+    YCOMMENT='Surface pressure'
+    CALL OUTVAR(PSEA_PRES,XTSTEP_CPL_SEA,ZWRITE(:,1))
+    CALL OASIS_PUT(NSEA_PRES_ID,KDATE,ZWRITE(:,:),IERR)
+    CALL CHECK_SFX_SEND(KLUOUT,IERR,YCOMMENT,ZWRITE(:,1))
+  ENDIF
+!
+! * Sea-ice output fields (in W/m2 or kg/m2/s)
+!
+  IF(LCPL_SEAICE)THEN
+!
+    IF(NSEAICE_HEAT_ID/=NUNDEF)THEN
+      YCOMMENT='Sea-ice non solar net heat flux over sea-ice'
+      CALL OUTVAR(PSEAICE_HEAT,XTSTEP_CPL_SEA,ZWRITE(:,1))
+      CALL OASIS_PUT(NSEAICE_HEAT_ID,KDATE,ZWRITE(:,:),IERR)
+      CALL CHECK_SFX_SEND(KLUOUT,IERR,YCOMMENT,ZWRITE(:,1))
+    ENDIF
+!
+    IF(NSEAICE_SNET_ID/=NUNDEF)THEN
+      YCOMMENT='Sea-ice solar net heat flux over sea-ice'
+      CALL OUTVAR(PSEAICE_SNET,XTSTEP_CPL_SEA,ZWRITE(:,1))
+      CALL OASIS_PUT(NSEAICE_SNET_ID,KDATE,ZWRITE(:,:),IERR)
+      CALL CHECK_SFX_SEND(KLUOUT,IERR,YCOMMENT,ZWRITE(:,1))
+    ENDIF
+!
+    IF(NSEAICE_EVAP_ID/=NUNDEF)THEN
+      YCOMMENT='Sea-ice sublimation over sea-ice'
+      CALL OUTVAR(PSEAICE_EVAP,XTSTEP_CPL_SEA,ZWRITE(:,1))
+      CALL OASIS_PUT(NSEAICE_EVAP_ID,KDATE,ZWRITE(:,:),IERR)
+      CALL CHECK_SFX_SEND(KLUOUT,IERR,YCOMMENT,ZWRITE(:,1))
+    ENDIF
+!
+  ENDIF
+!
+ENDIF
+!
+!-------------------------------------------------------------------------------
+!
+!*       5.     Send wave fields to OASIS :
+!               --------------------------
+IF(OSEND_WAVE)THEN
+!
+! * Send output fields
+!
+  IF(NWAVE_U10_ID/=NUNDEF)THEN
+    YCOMMENT='10m u-wind speed'
+    ZWRITE(:,1) = PWAVE_U10(:)
+    CALL OASIS_PUT(NWAVE_U10_ID,KDATE,ZWRITE(:,:),IERR)
+    CALL CHECK_SFX_SEND(KLUOUT,IERR,YCOMMENT,ZWRITE(:,1))
+  ENDIF
+!
+  IF(NWAVE_V10_ID/=NUNDEF)THEN
+    YCOMMENT='10m v-wind speed'
+    ZWRITE(:,1) = PWAVE_V10(:)
+    CALL OASIS_PUT(NWAVE_V10_ID,KDATE,ZWRITE(:,:),IERR)
+    CALL CHECK_SFX_SEND(KLUOUT,IERR,YCOMMENT,ZWRITE(:,1))
+  ENDIF
+!
+ENDIF
+!
+IF (LHOOK) CALL DR_HOOK('SFX_OASIS_SEND',1,ZHOOK_HANDLE)
+!
+!-------------------------------------------------------------------------------
+CONTAINS
+!-------------------------------------------------------------------------------
+!
+SUBROUTINE CHECK_SFX_SEND(KLUOUT,KERR,HCOMMENT,PWRITE)
+!
+USE MODI_ABOR1_SFX
+!
+IMPLICIT NONE
+!
+INTEGER,          INTENT(IN) :: KLUOUT
+INTEGER,          INTENT(IN) :: KERR
+ CHARACTER(LEN=*), INTENT(IN) :: HCOMMENT
+!
+REAL, DIMENSION(:), INTENT(OUT):: PWRITE
+!
+REAL(KIND=JPRB) :: ZHOOK_HANDLE
+!
+IF (LHOOK) CALL DR_HOOK('SFX_OASIS_SEND:CHECK_SFX_SEND',0,ZHOOK_HANDLE)
+!
+PWRITE(:) = XUNDEF
+!
+IF (KERR/=OASIS_OK.AND.KERR<OASIS_SENT) THEN
+   WRITE(KLUOUT,'(A,I4)')'Return OASIS code from sending '//TRIM(HCOMMENT)//' : ',KERR
+   CALL ABOR1_SFX('SFX_OASIS_SEND: problem sending '//TRIM(HCOMMENT))
+ENDIF 
+!
+IF (LHOOK) CALL DR_HOOK('SFX_OASIS_SEND:CHECK_SFX_SEND',1,ZHOOK_HANDLE)
+!
+END SUBROUTINE CHECK_SFX_SEND
+!
+!-------------------------------------------------------------------------------
+!
+SUBROUTINE OUTVAR(PIN,PDIV,PWRITE)
+!
+IMPLICIT NONE
+!
+REAL, DIMENSION(:), INTENT(IN) :: PIN
+REAL,               INTENT(IN) :: PDIV
+!
+REAL, DIMENSION(:), INTENT(OUT):: PWRITE
+!
+REAL(KIND=JPRB) :: ZHOOK_HANDLE
+!
+IF (LHOOK) CALL DR_HOOK('SFX_OASIS_SEND:OUTVAR',0,ZHOOK_HANDLE)
+!
+WHERE(PIN(:)/=XUNDEF)
+     PWRITE(:)=PIN(:)/PDIV
+ELSEWHERE
+     PWRITE(:)=XUNDEF
+ENDWHERE
+!
+IF (LHOOK) CALL DR_HOOK('SFX_OASIS_SEND:OUTVAR',1,ZHOOK_HANDLE)
+!
+END SUBROUTINE OUTVAR
+!
+!-------------------------------------------------------------------------------
+#endif
+!-------------------------------------------------------------------------------
+!
+END SUBROUTINE SFX_OASIS_SEND
diff --git a/src/ARCH_SRC/CPL_WAVE/SURFEX/write_lcover.F90 b/src/ARCH_SRC/CPL_WAVE/SURFEX/write_lcover.F90
new file mode 100644
index 0000000000000000000000000000000000000000..f4a6ec576d1d0cb014925a06fd7d13a63bb54fae
--- /dev/null
+++ b/src/ARCH_SRC/CPL_WAVE/SURFEX/write_lcover.F90
@@ -0,0 +1,102 @@
+!SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence
+!SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!SFX_LIC for details. version 1.
+!     #########
+      SUBROUTINE WRITE_LCOVER(DGU,U,HPROGRAM,OCOVER)
+!     ################################
+!
+!!****  *READ_LCOVER* - routine to write a file for
+!!                         physiographic data file of model _n 
+!!
+!!    PURPOSE
+!!    -------
+!!       The purpose of this routine is to write the list of covers to a file in parallel using MPI
+!!
+!!
+!!**  METHOD
+!!    ------
+!!
+!!    EXTERNAL
+!!    --------
+!!      
+!!
+!!
+!!    IMPLICIT ARGUMENTS
+!!    ------------------
+!!
+!!    REFERENCE
+!!    ---------
+!!
+!!
+!!    AUTHOR
+!!    ------
+!!	M. Moge   *LA - CNRS*	
+!!
+!!    MODIFICATIONS
+!!    -------------
+!!      J. Pianezze 08/2016 replacement of MPI_COMM_WOLRD by NMNH_COMM_WORLD
+!!
+!-------------------------------------------------------------------------------
+!
+!*       0.    DECLARATIONS
+!              ------------
+!
+#ifdef MNH_PARALLEL
+USE MODD_VAR_ll, ONLY : NMNH_COMM_WORLD
+#endif
+!
+USE MODD_DATA_COVER_PAR, ONLY : JPCOVER
+USE MODD_DIAG_SURF_ATM_n, ONLY : DIAG_SURF_ATM_t
+USE MODD_SURF_ATM_n, ONLY : SURF_ATM_t
+!
+USE MODI_WRITE_SURF
+!
+USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
+USE PARKIND1  ,ONLY : JPRB
+!
+IMPLICIT NONE
+!
+#ifndef NOMPI
+INCLUDE "mpif.h"
+#endif
+!
+!*       0.1   Declarations of arguments
+!              -------------------------
+!
+ CHARACTER(LEN=6),  INTENT(IN)  :: HPROGRAM ! calling program
+LOGICAL, DIMENSION(JPCOVER)    :: OCOVER   ! list of covers
+!
+!*       0.2   Declarations of local variables
+!              -------------------------------
+!
+TYPE(DIAG_SURF_ATM_t), INTENT(INOUT) :: DGU
+TYPE(SURF_ATM_t), INTENT(INOUT) :: U
+INTEGER           :: IRESP          ! Error code after reading
+CHARACTER(LEN=12) :: YRECFM         ! Name of the article to be read
+CHARACTER(LEN=100):: YCOMMENT       ! Comment string
+LOGICAL, DIMENSION(JPCOVER)    :: GCOVER   ! tmp list of covers
+REAL(KIND=JPRB) :: ZHOOK_HANDLE
+INTEGER   :: IINFO
+!-------------------------------------------------------------------------------
+!
+!
+!* ascendant compatibility
+IF (LHOOK) CALL DR_HOOK('WRITE_LCOVER',0,ZHOOK_HANDLE)
+#ifndef NOMPI
+#ifdef MNH_PARALLEL
+CALL MPI_ALLREDUCE(OCOVER, GCOVER, SIZE(OCOVER),MPI_LOGICAL, MPI_LOR, NMNH_COMM_WORLD, IINFO)
+#else
+CALL MPI_ALLREDUCE(OCOVER, GCOVER, SIZE(OCOVER),MPI_LOGICAL, MPI_LOR, MPI_COMM_WORLD, IINFO)
+#endif
+#endif
+OCOVER(:)=GCOVER(:)
+YRECFM='COVER_LIST'
+YCOMMENT='(LOGICAL LIST)'
+CALL WRITE_SURF(DGU,U,HPROGRAM,YRECFM,OCOVER(:),IRESP,HCOMMENT=YCOMMENT,HDIR='-')
+!
+IF (LHOOK) CALL DR_HOOK('WRITE_LCOVER',1,ZHOOK_HANDLE)
+!
+!-------------------------------------------------------------------------------
+!
+END SUBROUTINE WRITE_LCOVER
diff --git a/src/ARCH_SRC/CPL_WAVE/SURFEX/writesurf_seafluxn.F90 b/src/ARCH_SRC/CPL_WAVE/SURFEX/writesurf_seafluxn.F90
new file mode 100644
index 0000000000000000000000000000000000000000..35f7469b99b35f51a0c29cadd4b2f0ee387bda8c
--- /dev/null
+++ b/src/ARCH_SRC/CPL_WAVE/SURFEX/writesurf_seafluxn.F90
@@ -0,0 +1,252 @@
+!SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence
+!SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!SFX_LIC for details. version 1.
+!     #########
+      SUBROUTINE WRITESURF_SEAFLUX_n (DGU, U, &
+                                       O, OR, S, &
+                                      HPROGRAM)
+!     ########################################
+!
+!!****  *WRITE_SEAFLUX_n* - writes SEAFLUX fields
+!!
+!!    PURPOSE
+!!    -------
+!!
+!!**  METHOD
+!!    ------
+!!
+!!    EXTERNAL
+!!    --------
+!!
+!!
+!!    IMPLICIT ARGUMENTS
+!!    ------------------
+!!
+!!    REFERENCE
+!!    ---------
+!!
+!!
+!!    AUTHOR
+!!    ------
+!!	V. Masson   *Meteo France*	
+!!
+!!    MODIFICATIONS
+!!    -------------
+!!      Original    01/2003 
+!!      Modified    01/2014 : S. Senesi : handle seaice scheme
+!!      S. Belamari 03/2014   Include sea surface salinity XSSS
+!!      R. Séférian 01/2015 : introduce interactive ocean surface albedo
+!!      Modified    03/2014 : M.N. Bouin  ! possibility of wave parameters
+!!                                        ! from external source
+!!      Modified    11/2014 : J. Pianezze ! add currents and charnock coefficient
+!-------------------------------------------------------------------------------
+!
+!*       0.    DECLARATIONS
+!              ------------
+!
+!
+!
+!
+!
+!
+USE MODD_DIAG_SURF_ATM_n, ONLY : DIAG_SURF_ATM_t
+USE MODD_SURF_ATM_n, ONLY : SURF_ATM_t
+!
+USE MODD_OCEAN_n, ONLY : OCEAN_t
+USE MODD_OCEAN_REL_n, ONLY : OCEAN_REL_t
+USE MODD_SEAFLUX_n, ONLY : SEAFLUX_t
+!
+USE MODD_SFX_OASIS,  ONLY : LCPL_WAVE, LCPL_SEA
+!
+USE MODI_WRITE_SURF
+USE MODI_WRITESURF_OCEAN_n
+USE MODI_WRITESURF_SEAICE_N
+!
+USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
+USE PARKIND1  ,ONLY : JPRB
+!
+IMPLICIT NONE
+!
+!*       0.1   Declarations of arguments
+!              -------------------------
+!
+!
+!
+TYPE(DIAG_SURF_ATM_t), INTENT(INOUT) :: DGU
+TYPE(SURF_ATM_t), INTENT(INOUT) :: U
+!
+TYPE(OCEAN_t), INTENT(INOUT) :: O
+TYPE(OCEAN_REL_t), INTENT(INOUT) :: OR
+TYPE(SEAFLUX_t), INTENT(INOUT) :: S
+!
+ CHARACTER(LEN=6),  INTENT(IN)  :: HPROGRAM ! program calling
+
+!
+!*       0.2   Declarations of local variables
+!              -------------------------------
+!
+INTEGER           :: JMTH, INMTH
+ CHARACTER(LEN=2 ) :: YMTH
+!
+INTEGER           :: IRESP          ! IRESP  : return-code if a problem appears
+ CHARACTER(LEN=12) :: YRECFM         ! Name of the article to be read
+ CHARACTER(LEN=100):: YCOMMENT       ! Comment string
+REAL(KIND=JPRB) :: ZHOOK_HANDLE
+!
+!-------------------------------------------------------------------------------
+!
+!
+IF (LHOOK) CALL DR_HOOK('WRITESURF_SEAFLUX_N',0,ZHOOK_HANDLE)
+!
+ CALL WRITESURF_OCEAN_n(DGU, U, &
+                       O, OR, &
+                       HPROGRAM)
+!
+!*       2.     Sea-ice prognostic fields:
+!               --------------------------
+!
+!* flag to tell if Sea Ice model is used
+!
+YCOMMENT='flag to handle sea ice cover'
+ CALL WRITE_SURF(DGU, U, &
+                HPROGRAM,'HANDLE_SIC',S%LHANDLE_SIC,IRESP,YCOMMENT)
+!
+IF (S%LHANDLE_SIC) CALL WRITESURF_SEAICE_n(DGU, U, &
+                                           S, &
+                                           HPROGRAM)
+!
+!
+!*       3.     Prognostic fields:
+!               -----------------
+!
+!* water temperature
+!
+IF(S%LINTERPOL_SST)THEN
+!
+  INMTH=SIZE(S%XSST_MTH,2)
+!
+  DO JMTH=1,INMTH
+     WRITE(YMTH,'(I2)') (JMTH-1)
+     YRECFM='SST_MTH'//ADJUSTL(YMTH(:LEN_TRIM(YMTH)))
+     YCOMMENT='SST at month t'//ADJUSTL(YMTH(:LEN_TRIM(YMTH)))
+     CALL WRITE_SURF(DGU, U, &
+                HPROGRAM,YRECFM,S%XSST_MTH(:,JMTH),IRESP,HCOMMENT=YCOMMENT)
+  ENDDO
+!
+ENDIF
+!
+YRECFM='SST'
+YCOMMENT='SST'
+ CALL WRITE_SURF(DGU, U, &
+                HPROGRAM,YRECFM,S%XSST(:),IRESP,HCOMMENT=YCOMMENT)  
+!
+!-------------------------------------------------------------------------------
+!
+!*       4.     Semi-prognostic fields:
+!               ----------------------
+!
+!* roughness length
+!
+YRECFM='Z0SEA'
+YCOMMENT='Z0SEA (m)'
+ CALL WRITE_SURF(DGU, U, &
+                HPROGRAM,YRECFM,S%XZ0(:),IRESP,HCOMMENT=YCOMMENT)
+!
+!* significant height
+!
+YRECFM='HS'
+YCOMMENT='HS (m)'
+ CALL WRITE_SURF(DGU, U, &
+                 HPROGRAM,YRECFM,S%XHS(:),IRESP,HCOMMENT=YCOMMENT)
+!
+!* peak period
+!
+YRECFM='TP'
+YCOMMENT='TP (s)'
+ CALL WRITE_SURF(DGU, U, &
+                 HPROGRAM,YRECFM,S%XTP(:),IRESP,HCOMMENT=YCOMMENT)
+!
+!
+IF (LCPL_WAVE) THEN
+  !
+  !* Charnock coefficient
+  !
+  YRECFM='CHARN'
+  YCOMMENT='CHARN (-)'
+  CALL WRITE_SURF(DGU, U, &
+                  HPROGRAM,YRECFM,S%XCHARN(:),IRESP,HCOMMENT=YCOMMENT)
+  !
+END IF
+
+IF (LCPL_WAVE .OR. LCPL_SEA) THEN
+  !
+  !* u-current velocity
+  !
+  YRECFM='UMER'
+  YCOMMENT='UMER (m/s)'
+  CALL WRITE_SURF(DGU, U, &
+                  HPROGRAM,YRECFM,S%XUMER(:),IRESP,HCOMMENT=YCOMMENT)
+  !
+  !* v-current velocity
+  !
+  YRECFM='VMER'
+  YCOMMENT='VMER (m/s)'
+  CALL WRITE_SURF(DGU, U, &
+                  HPROGRAM,YRECFM,S%XVMER(:),IRESP,HCOMMENT=YCOMMENT)
+  !
+ENDIF
+!
+!* sea surface salinity
+!
+IF(S%LINTERPOL_SSS)THEN
+   !
+   INMTH=SIZE(S%XSSS_MTH,2)
+   !
+   DO JMTH=1,INMTH
+      WRITE(YMTH,'(I2)') (JMTH-1)
+      YRECFM='SSS_MTH'//ADJUSTL(YMTH(:LEN_TRIM(YMTH)))
+      YCOMMENT='Sea Surface Salinity at month t'//ADJUSTL(YMTH(:LEN_TRIM(YMTH)))
+      CALL WRITE_SURF(DGU, U, &
+                HPROGRAM,YRECFM,S%XSSS_MTH(:,JMTH),IRESP,HCOMMENT=YCOMMENT)
+   ENDDO
+!
+ENDIF
+!
+YRECFM='SSS'
+YCOMMENT='Sea Surface Salinity'
+ CALL WRITE_SURF(DGU, U, &
+                HPROGRAM,YRECFM,S%XSSS(:),IRESP,HCOMMENT=YCOMMENT)  
+!
+!
+!* ocean surface albedo (direct and diffuse fraction)
+!
+IF(S%CSEA_ALB=='RS14')THEN
+!
+  YRECFM='OSA_DIR'
+  YCOMMENT='direct ocean surface albedo (-)'
+  CALL WRITE_SURF(DGU, U, &
+                HPROGRAM,YRECFM,S%XDIR_ALB(:),IRESP,HCOMMENT=YCOMMENT)
+!
+  YRECFM='OSA_SCA'
+  YCOMMENT='diffuse ocean surface albedo (-)'
+  CALL WRITE_SURF(DGU, U, &
+                HPROGRAM,YRECFM,S%XSCA_ALB(:),IRESP,HCOMMENT=YCOMMENT)
+!
+ENDIF
+!
+!-------------------------------------------------------------------------------
+!
+!*       5.  Time
+!            ----
+!
+YRECFM='DTCUR'
+YCOMMENT='s'
+ CALL WRITE_SURF(DGU, U, &
+                HPROGRAM,YRECFM,S%TTIME,IRESP,HCOMMENT=YCOMMENT)
+IF (LHOOK) CALL DR_HOOK('WRITESURF_SEAFLUX_N',1,ZHOOK_HANDLE)
+!
+!
+!-------------------------------------------------------------------------------
+!
+END SUBROUTINE WRITESURF_SEAFLUX_n
diff --git a/src/LIB/oasis3-mct_v3.tar.gz b/src/LIB/oasis3-mct_v3.tar.gz
new file mode 100644
index 0000000000000000000000000000000000000000..ad43bfa1f8c85456f4c2729a7d673399e2f9e15e
--- /dev/null
+++ b/src/LIB/oasis3-mct_v3.tar.gz
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:d1c19505b8b08320817335703214e49b065765e24f3fbea45e1985f9fc5bf300
+size 16900940
diff --git a/src/LIB/toy_v1-0.tar.gz b/src/LIB/toy_v1-0.tar.gz
new file mode 100644
index 0000000000000000000000000000000000000000..de54521d2bc4441f53e99fd72288db2fe8e5cb1e
--- /dev/null
+++ b/src/LIB/toy_v1-0.tar.gz
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:22757def28c47328b44de5f10029803ad2e01b1923c3e6defa3b403f20639040
+size 7607