diff --git a/src/LIB/SURCOUCHE/src/mode_field.f90 b/src/LIB/SURCOUCHE/src/mode_field.f90
index 041c3a85b1f926af62708756566e192c72a596ff..d3a1e491f775888a9ca30da15c2290be8e44fabe 100644
--- a/src/LIB/SURCOUCHE/src/mode_field.f90
+++ b/src/LIB/SURCOUCHE/src/mode_field.f90
@@ -14,6 +14,7 @@
 !  P. Wautelet 06/06/2019: bug correction in FIELDLIST_GOTO_MODEL (XLSTHM was overwritten if LUSERV=.FALSE. due to wrong IF block)
 !  P. Wautelet 19/06/2019: add Fieldlist_nmodel_resize subroutine + provide KMODEL to INI_FIELD_LIST when known
 !  P. Wautelet 23/01/2020: split in modd_field.f90 and mode_field.f90
+!  JL Redelsperger 03/2021; add variables for Ocean LES and auto-coupled version
 !-----------------------------------------------------------------
 module mode_field
 
@@ -1047,6 +1048,32 @@ TFIELDLIST(IDX)%LTIMEDEP   = .FALSE.
 IDX = IDX+1
 !
 IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST()
+TFIELDLIST(IDX)%CMNHNAME   = 'LOCEAN'
+TFIELDLIST(IDX)%CSTDNAME   = ''
+TFIELDLIST(IDX)%CLONGNAME  = 'LOCEAN'
+TFIELDLIST(IDX)%CUNITS     = ''
+TFIELDLIST(IDX)%CDIR       = '--'
+TFIELDLIST(IDX)%CCOMMENT   = 'Logical for Ocean MesoNH'
+TFIELDLIST(IDX)%NGRID      = 0
+TFIELDLIST(IDX)%NTYPE      = TYPELOG
+TFIELDLIST(IDX)%NDIMS      = 0
+TFIELDLIST(IDX)%LTIMEDEP   = .FALSE.
+IDX = IDX+1
+!
+IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST()
+TFIELDLIST(IDX)%CMNHNAME   = 'LCOUPLES'
+TFIELDLIST(IDX)%CSTDNAME   = ''
+TFIELDLIST(IDX)%CLONGNAME  = 'LCOUPLES'
+TFIELDLIST(IDX)%CUNITS     = ''
+TFIELDLIST(IDX)%CDIR       = '--'
+TFIELDLIST(IDX)%CCOMMENT   = 'Logical for coupling O-A LES'
+TFIELDLIST(IDX)%NGRID      = 0
+TFIELDLIST(IDX)%NTYPE      = TYPELOG
+TFIELDLIST(IDX)%NDIMS      = 0
+TFIELDLIST(IDX)%LTIMEDEP   = .FALSE.
+IDX = IDX+1
+!
+IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST()
 TFIELDLIST(IDX)%CMNHNAME   = 'SURF'
 TFIELDLIST(IDX)%CSTDNAME   = ''
 TFIELDLIST(IDX)%CLONGNAME  = 'SURF'
@@ -1269,6 +1296,20 @@ ALLOCATE(TFIELDLIST(IDX)%TFIELD_X3D(IMODEL))
 IDX = IDX+1
 !
 IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST()
+TFIELDLIST(IDX)%CMNHNAME   = 'PHIT'
+TFIELDLIST(IDX)%CSTDNAME   = 'reduced pressure'
+TFIELDLIST(IDX)%CLONGNAME  = 'PHIT'
+TFIELDLIST(IDX)%CUNITS     = 'Pa'
+TFIELDLIST(IDX)%CDIR       = 'XY'
+TFIELDLIST(IDX)%CCOMMENT   = 'X_Y_Z_Reduced Pressure Oce/Shallow conv'
+TFIELDLIST(IDX)%NGRID      = 1
+TFIELDLIST(IDX)%NTYPE      = TYPEREAL
+TFIELDLIST(IDX)%NDIMS      = 3
+TFIELDLIST(IDX)%LTIMEDEP   = .TRUE.
+ALLOCATE(TFIELDLIST(IDX)%TFIELD_X3D(IMODEL))
+IDX = IDX+1
+!
+IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST()
 TFIELDLIST(IDX)%CMNHNAME   = 'RT'
 TFIELDLIST(IDX)%CSTDNAME   = ''
 TFIELDLIST(IDX)%CLONGNAME  = 'RT'
@@ -3449,6 +3490,31 @@ IDX = IDX+1
 !END IF !LFILTERING
 END IF !CPROGRAM==REAL .OR. LFICDF
 !
+IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST()
+TFIELDLIST(IDX)%CMNHNAME   = 'NFRCLT'
+TFIELDLIST(IDX)%CSTDNAME   = ''
+TFIELDLIST(IDX)%CLONGNAME  = 'NFRCLT'
+TFIELDLIST(IDX)%CUNITS     = 'nb entier de forc'
+TFIELDLIST(IDX)%CDIR       = '--'
+TFIELDLIST(IDX)%CCOMMENT   = 'nb de flux sfc forcant LES ocean'
+TFIELDLIST(IDX)%NGRID      = 0
+TFIELDLIST(IDX)%NTYPE      = TYPEINT
+TFIELDLIST(IDX)%NDIMS      = 0
+TFIELDLIST(IDX)%LTIMEDEP   = .FALSE.
+IDX = IDX+1
+IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST()
+TFIELDLIST(IDX)%CMNHNAME   = 'NINFRT'
+TFIELDLIST(IDX)%CSTDNAME   = ''
+TFIELDLIST(IDX)%CLONGNAME  = 'NINFRT'
+TFIELDLIST(IDX)%CUNITS     = 'nb entier de forc'
+TFIELDLIST(IDX)%CDIR       = '--'
+TFIELDLIST(IDX)%CCOMMENT   = 'nb de flux sfc forcant LES ocean'
+TFIELDLIST(IDX)%NGRID      = 0
+TFIELDLIST(IDX)%NTYPE      = TYPEINT
+TFIELDLIST(IDX)%NDIMS      = 0
+TFIELDLIST(IDX)%LTIMEDEP   = .FALSE.
+IDX = IDX+1
+!
 !
 WRITE(YMSG,'("number of used fields=",I4," out of ",I4)') IDX-1,MAXFIELDS
 CALL PRINT_MSG(NVERB_INFO,'GEN','INI_FIELD_LIST',TRIM(YMSG))
@@ -3724,6 +3790,7 @@ USE MODD_GRID_n
 USE MODD_HURR_FIELD_n
 USE MODD_LIMA_PRECIP_SCAVENGING_n
 USE MODD_LSFIELD_n
+USE MODD_OCEANH
 USE MODD_PARAM_n
 USE MODD_PAST_FIELD_n
 USE MODD_CH_PH_n
@@ -3792,6 +3859,7 @@ CALL FIND_FIELD_ID_FROM_MNHNAME('WT',   IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(K
 CALL FIND_FIELD_ID_FROM_MNHNAME('THT',  IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA => XTHT
 CALL FIND_FIELD_ID_FROM_MNHNAME('TKET', IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA => XTKET
 CALL FIND_FIELD_ID_FROM_MNHNAME('PABST',IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA => XPABST
+CALL FIND_FIELD_ID_FROM_MNHNAME('PHIT',IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA => XPHIT
 CALL FIND_FIELD_ID_FROM_MNHNAME('RT',   IID,IRESP); TFIELDLIST(IID)%TFIELD_X4D(KFROM)%DATA => XRT
 !
 IF (ASSOCIATED(XRT)) THEN
@@ -3926,7 +3994,7 @@ CALL FIND_FIELD_ID_FROM_MNHNAME('LSUM', IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(K
 CALL FIND_FIELD_ID_FROM_MNHNAME('LSVM', IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA => XLSVM
 CALL FIND_FIELD_ID_FROM_MNHNAME('LSWM', IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA => XLSWM
 CALL FIND_FIELD_ID_FROM_MNHNAME('LSTHM',IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA => XLSTHM
-IF ( LUSERV ) THEN
+IF (LUSERV) THEN
   CALL FIND_FIELD_ID_FROM_MNHNAME('LSRVM',IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA => XLSRVM
 END IF
 CALL FIND_FIELD_ID_FROM_MNHNAME('LBXUM', IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA => XLBXUM
@@ -4107,6 +4175,7 @@ CALL FIND_FIELD_ID_FROM_MNHNAME('WT',   IID,IRESP); XWT    => TFIELDLIST(IID)%TF
 CALL FIND_FIELD_ID_FROM_MNHNAME('THT',  IID,IRESP); XTHT   => TFIELDLIST(IID)%TFIELD_X3D(KTO)%DATA
 CALL FIND_FIELD_ID_FROM_MNHNAME('TKET', IID,IRESP); XTKET  => TFIELDLIST(IID)%TFIELD_X3D(KTO)%DATA
 CALL FIND_FIELD_ID_FROM_MNHNAME('PABST',IID,IRESP); XPABST => TFIELDLIST(IID)%TFIELD_X3D(KTO)%DATA
+CALL FIND_FIELD_ID_FROM_MNHNAME('PHIT', IID,IRESP); XPHIT  => TFIELDLIST(IID)%TFIELD_X3D(KTO)%DATA
 CALL FIND_FIELD_ID_FROM_MNHNAME('RT',   IID,IRESP); XRT    => TFIELDLIST(IID)%TFIELD_X4D(KTO)%DATA
 !
 IF (ASSOCIATED(XRT)) THEN
@@ -4253,7 +4322,7 @@ CALL FIND_FIELD_ID_FROM_MNHNAME('LSUM', IID,IRESP); XLSUM  => TFIELDLIST(IID)%TF
 CALL FIND_FIELD_ID_FROM_MNHNAME('LSVM', IID,IRESP); XLSVM  => TFIELDLIST(IID)%TFIELD_X3D(KTO)%DATA
 CALL FIND_FIELD_ID_FROM_MNHNAME('LSWM', IID,IRESP); XLSWM  => TFIELDLIST(IID)%TFIELD_X3D(KTO)%DATA
 CALL FIND_FIELD_ID_FROM_MNHNAME('LSTHM',IID,IRESP); XLSTHM => TFIELDLIST(IID)%TFIELD_X3D(KTO)%DATA
-IF ( LUSERV ) THEN
+IF (LUSERV) THEN
   CALL FIND_FIELD_ID_FROM_MNHNAME('LSRVM',IID,IRESP); XLSRVM => TFIELDLIST(IID)%TFIELD_X3D(KTO)%DATA
 END IF
 CALL FIND_FIELD_ID_FROM_MNHNAME('LBXUM', IID,IRESP); XLBXUM  => TFIELDLIST(IID)%TFIELD_X3D(KTO)%DATA
diff --git a/src/MNH/bl89.f90 b/src/MNH/bl89.f90
index 860afcf7985344f55f85f9b8efc2314ceb658774..31db7726781c590d4174cd1cf51af2cd2243fae2 100644
--- a/src/MNH/bl89.f90
+++ b/src/MNH/bl89.f90
@@ -72,6 +72,7 @@ END MODULE MODI_BL89
 !!                            reversed vertical levels
 !!  Philippe 13/02/2018: use ifdef MNH_REAL to prevent problems with intrinsics on Blue Gene/Q
 !!                  01/2019 (Q. Rodier) support for RM17 mixing length
+!!                  03/2021 (JL Redelsperger) Ocean model case 
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
@@ -81,6 +82,7 @@ USE MODD_CONF, ONLY: CPROGRAM
 USE MODD_CST
 USE MODD_CTURB
 USE MODD_PARAMETERS
+USE MODD_DYN_n, ONLY : LOCEAN
 use modd_precision, only: MNHREAL
 !
 !
@@ -177,6 +179,7 @@ ELSE
     ZSHEAR   (:,JK)   = RESHAPE(PSHEAR  (:,:,JK),(/ IIU*IJU /) )    
     ZTKEM  (:,JK)   = RESHAPE(PTKEM  (:,:,JK),(/ IIU*IJU /) )
     ZG_O_THVREF(:,JK)   = RESHAPE(XG/PTHVREF(:,:,JK),(/ IIU*IJU /) )
+    IF (LOCEAN) ZG_O_THVREF(:,JK)   = XG * XALPHAOC
     DO JRR=1,KRR
       ZRM  (:,JK,JRR) = RESHAPE(PRM    (:,:,JK,JRR),(/ IIU*IJU /) )
     END DO
diff --git a/src/MNH/compute_press_from_oceanbot.f90 b/src/MNH/compute_press_from_oceanbot.f90
new file mode 100644
index 0000000000000000000000000000000000000000..86fe83d26a4061f4247523cb208e2d7012248acb
--- /dev/null
+++ b/src/MNH/compute_press_from_oceanbot.f90
@@ -0,0 +1,232 @@
+!MNH_LIC Copyright 1994-2018 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_COMPUTE_PRESS_FROM_OCEANBOT
+!     #####################################
+INTERFACE COMPUTE_PRESS_FROM_OCEANBOT
+            SUBROUTINE COMPUTE_PRESS_FROM_OCEANBOT3D(PRHO,PZFLUX,PSURF2D, &
+                                                   PFLUX,PMASS)
+!
+REAL, DIMENSION(:,:,:), INTENT(IN)  :: PRHO      ! density
+REAL, DIMENSION(:,:,:), INTENT(IN)  :: PZFLUX    ! altitude of flux points
+REAL, DIMENSION(:,:),   INTENT(IN)  :: PSURF2D   ! bottom pressure
+REAL, DIMENSION(:,:,:), INTENT(OUT) :: PFLUX  ! press at flux points
+REAL, DIMENSION(:,:,:), INTENT(OUT) :: PMASS  ! press at mass points
+!
+END SUBROUTINE COMPUTE_PRESS_FROM_OCEANBOT3D
+!
+            SUBROUTINE COMPUTE_PRESS_FROM_OCEANBOT1D(PRHO,PZFLUX,PSURF, &
+                                                   PFLUX,PMASS)
+!
+REAL, DIMENSION(:), INTENT(IN)  :: PRHO      ! virtual potential temperature
+REAL, DIMENSION(:), INTENT(IN)  :: PZFLUX    ! altitude of flux points
+REAL,               INTENT(IN)  :: PSURF  ! botttom press function
+REAL, DIMENSION(:), INTENT(OUT) :: PFLUX  ! press at flux points
+REAL, DIMENSION(:), INTENT(OUT) :: PMASS  ! press at mass points
+!
+END SUBROUTINE COMPUTE_PRESS_FROM_OCEANBOT1D
+!
+END INTERFACE 
+END MODULE MODI_COMPUTE_PRESS_FROM_OCEANBOT
+!     ######################################
+      MODULE MODI_COMPUTE_PRESS_FROM_OCEANBOT3D
+!     ######################################
+INTERFACE
+            SUBROUTINE COMPUTE_PRESS_FROM_OCEANBOT3D(PRHO,PZFLUX,PSURF2D, &
+                                                   PFLUX,PMASS)
+!
+REAL, DIMENSION(:,:,:), INTENT(IN)  :: PRHO     ! density
+REAL, DIMENSION(:,:,:), INTENT(IN)  :: PZFLUX    ! altitude of flux points
+REAL, DIMENSION(:,:),   INTENT(IN) :: PSURF2D! bot press function
+REAL, DIMENSION(:,:,:), INTENT(OUT) :: PFLUX  ! bot press at flux points
+REAL, DIMENSION(:,:,:), INTENT(OUT) :: PMASS  ! bot press at mass points
+!
+END SUBROUTINE COMPUTE_PRESS_FROM_OCEANBOT3D
+!
+END INTERFACE
+END MODULE MODI_COMPUTE_PRESS_FROM_OCEANBOT3D
+!     ########################################################################
+      SUBROUTINE COMPUTE_PRESS_FROM_OCEANBOT3D(PRHO,PZFLUX,PSURF2D,PFLUX,PMASS)
+!     ########################################################################
+!
+!!****  *COMPUTE_EXNER_FROM_OCEANBOT3D* - computation of hydrostatic 
+!!                                      pressure from ocean bottom
+!!
+!!    PURPOSE
+!!    -------
+!!
+!!**  METHOD
+!!    ------
+!!    
+!!  1 The local pressure is computed at flux points by integration of the hydrostatic
+!!    relation from ground (PSURF2D) to top.
+!!
+!!    dP= -g rho  dz
+!!
+!!  2 The pressure at mass level is computed as follows and linearly 
+!!    extrapolated for the uppest non-physical level:
+!!
+!!      ~           P(k+1)-P(k)
+!!     P(k) = -----------------------
+!!                lnP(k+1)-lnP(k)
+!!         
+!!
+!!    EXTERNAL
+!!    --------
+!!
+!!    function FMLOOK  :to retrieve a logical unit number associated with a file
+!!
+!!    IMPLICIT ARGUMENTS
+!!    ------------------
+!!
+!!      Module MODD_CONF      : contains configuration variables for all models.
+!!         NVERB : verbosity level for output-listing
+!!         LTHINSHELL : logical for thinshell approximation
+!!      Module MODD_LUNIT     :  contains logical unit names for all models
+!!         CLUOUT0 : name of output-listing
+!!      Module MODD_CST       : contains physical constants
+        !!         XG  : gravity constant
+        !!      Module MODD_PARAMETERS
+!!         JPVEXT,JPHEXT
+!!
+!!    REFERENCE
+!!    ---------
+!!
+!!      Book 2
+!!
+!!    AUTHOR
+!!    ------
+!!	
+!!      JLR
+!!    MODIFICATIONS
+!!    -------------
+!!      Original    Fev2021
+!-------------------------------------------------------------------------------
+!
+!* 0.    DECLARATIONS
+!        ------------
+!
+USE MODD_CST, ONLY : XG
+USE MODD_PARAMETERS, ONLY : JPVEXT
+!
+IMPLICIT NONE
+!
+!*       0.1   Declaration of arguments
+!              ------------------------
+!
+REAL, DIMENSION(:,:,:), INTENT(IN)  :: PRHO      ! density
+REAL, DIMENSION(:,:,:), INTENT(IN)  :: PZFLUX    ! altitude of flux points
+REAL, DIMENSION(:,:)  , INTENT(IN)  :: PSURF2D! bottom pressuren
+REAL, DIMENSION(:,:,:), INTENT(OUT) :: PFLUX  ! pres at flux points
+REAL, DIMENSION(:,:,:), INTENT(OUT) :: PMASS  ! pres at mass points
+!
+!*       0.2   Declaration of local variables
+!              ------------------------------
+INTEGER :: IKB,IKU,JK
+!-------------------------------------------------------------------------------
+!*       1.    INITIALIZATIONS
+!              ---------------
+IKB=JPVEXT+1
+IKU=SIZE(PZFLUX,3)
+!-------------------------------------------------------------------------------
+!*       2.   COMPUTATION OF PRESSURE AT FLUX POINTS
+!             ------------------------------------------------
+PFLUX(:,:,IKB)=PSURF2D(:,:)
+!
+ DO JK=IKB+1,IKU
+  PFLUX(:,:,JK)=PFLUX(:,:,JK-1) + XG*PRHO(:,:,JK-1)*(PZFLUX(:,:,JK-1)-PZFLUX(:,:,JK))
+ END DO
+ DO JK=IKB-1,1,-1
+  PFLUX(:,:,JK)=PFLUX(:,:,JK+1) + XG*PRHO(:,:,JK)  *(PZFLUX(:,:,JK+1)-PZFLUX(:,:,JK))
+ END DO
+!-------------------------------------------------------------------------------
+!                     
+!*     3.   COMPUTATION OF Pressure AT MASS POINTS
+!             --------------------------------------------
+ PMASS(:,:,1:IKU-1)=(PFLUX(:,:,1:IKU-1)+PFLUX(:,:,2:IKU))*.5
+! (PFLUX(:,:,1:IKU-1)-PFLUX(:,:,2:IKU))            &
+!                      /(LOG(PFLUX(:,:,1:IKU-1))-LOG(PFLUX(:,:,2:IKU)))
+!
+!accute extrapolation not possible as level IKU is in atmosphere. Assume rho_air=1.2
+ PMASS(:,:,IKU)=  PMASS(:,:,IKU-1) - XG*1.2 * ( PZFLUX(:,:,IKU)-PZFLUX(:,:,IKU-1) )
+!
+!-------------------------------------------------------------------------------
+!
+END SUBROUTINE COMPUTE_PRESS_FROM_OCEANBOT3D
+!     ######################################################################
+      SUBROUTINE COMPUTE_PRESS_FROM_OCEANBOT1D(PRHO,PZFLUX,PSURF,PFLUX,PMASS)
+!     ######################################################################
+!
+!!****  *COMPUTE_PRESS_FROM_OCEANBOT1D* - computation of hydrostatic press eq
+!!
+!!    PURPOSE
+!!    -------
+!!
+!!**  METHOD
+!!    ------
+!!
+!!    EXTERNAL
+!!    --------
+!!
+!!    IMPLICIT ARGUMENTS
+!!    ------------------
+!!
+!!    REFERENCE
+!!    ---------
+!!
+!!      Book 2
+!!
+!!    AUTHOR
+!!    ------
+!!	
+!!      V.Masson  Meteo-France
+!!
+!!    MODIFICATIONS
+!!    -------------
+!!      Original    06/03/96
+!!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
+!-------------------------------------------------------------------------------
+!
+!* 0.    DECLARATIONS
+!        ------------
+!
+USE MODI_COMPUTE_PRESS_FROM_OCEANBOT3D
+!
+IMPLICIT NONE
+!
+!*       0.1   Declaration of arguments
+!              ------------------------
+!
+REAL, DIMENSION(:), INTENT(IN)  :: PRHO      ! virtual potential temperature
+REAL, DIMENSION(:), INTENT(IN)  :: PZFLUX    ! altitude of flux points
+REAL,               INTENT(IN)  :: PSURF  ! ground Exner function
+REAL, DIMENSION(:), INTENT(OUT) :: PFLUX  ! Exner function at flux points
+REAL, DIMENSION(:), INTENT(OUT) :: PMASS  ! Exner function at mass points
+!
+!*       0.2   Declaration of local variables
+!              ------------------------------
+!
+REAL, DIMENSION(1,1,SIZE(PZFLUX))  :: ZRHO      ! virtual potential temperature
+REAL, DIMENSION(1,1,SIZE(PZFLUX))  :: ZZFLUX    ! altitude of flux points
+REAL, DIMENSION(1,1)               :: ZPSURF  ! ground Exner function
+REAL, DIMENSION(1,1,SIZE(PZFLUX))  :: ZPFLUX  ! Exner function at flux points
+REAL, DIMENSION(1,1,SIZE(PZFLUX))  :: ZPMASS  ! Exner function at mass points                                    
+!
+!-------------------------------------------------------------------------------
+!
+ZRHO(1,1,:)=PRHO(:)
+ZZFLUX(1,1,:)=PZFLUX(:)
+ZPSURF(1,1)=PSURF
+!
+CALL COMPUTE_PRESS_FROM_OCEANBOT3D(ZRHO,ZZFLUX,ZPSURF,ZPFLUX,ZPMASS)
+!
+PFLUX(:)=ZPFLUX(1,1,:)
+PMASS(:)=ZPMASS(1,1,:)
+!
+!-------------------------------------------------------------------------------
+!
+END SUBROUTINE COMPUTE_PRESS_FROM_OCEANBOT1D
+
diff --git a/src/MNH/compute_press_from_oceansfc.f90 b/src/MNH/compute_press_from_oceansfc.f90
new file mode 100644
index 0000000000000000000000000000000000000000..ba8f86c200a06f7b3b879acaaceafca30e9b700c
--- /dev/null
+++ b/src/MNH/compute_press_from_oceansfc.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.
+!-----------------------------------------------------------------
+!     ##################################
+      MODULE MODI_COMPUTE_PRESS_FROM_OCEANSFC
+!     ##################################
+INTERFACE COMPUTE_PRESS_FROM_OCEANSFC
+            SUBROUTINE COMPUTE_PRESS_FROM_OCEANSFC3D(PRHO,PZFLUX,PTOP2D, &
+                                                PFLUX,PMASS)
+!
+REAL, DIMENSION(:,:,:), INTENT(IN)  :: PRHO      ! density
+REAL, DIMENSION(:,:,:), INTENT(IN)  :: PZFLUX    ! altitude of flux points
+REAL, DIMENSION(:,:)  , INTENT(IN)  :: PTOP2D ! 2D Pressure at domain top
+REAL, DIMENSION(:,:,:), INTENT(OUT) :: PFLUX  ! Pressure at flux points
+REAL, DIMENSION(:,:,:), INTENT(OUT) :: PMASS  ! Pressure at mass points
+!
+END SUBROUTINE COMPUTE_PRESS_FROM_OCEANSFC3D
+!
+            SUBROUTINE COMPUTE_PRESS_FROM_OCEANSFC1D(PRHO,PZFLUX,PTOP, &
+                                                PFLUX,PMASS)
+!
+REAL, DIMENSION(:), INTENT(IN)  :: PRHO      ! density
+REAL, DIMENSION(:), INTENT(IN)  :: PZFLUX    ! altitude of flux points
+REAL,               INTENT(IN)  :: PTOP   ! Pressure at domain top 
+REAL, DIMENSION(:), INTENT(OUT) :: PFLUX  ! Pressure at flux points
+REAL, DIMENSION(:), INTENT(OUT) :: PMASS  ! Pressure at mass points
+!
+END SUBROUTINE COMPUTE_PRESS_FROM_OCEANSFC1D
+END INTERFACE
+END MODULE MODI_COMPUTE_PRESS_FROM_OCEANSFC
+!     ####################################
+      MODULE MODI_COMPUTE_PRESS_FROM_OCEANSFC3D
+!     ####################################
+INTERFACE
+            SUBROUTINE COMPUTE_PRESS_FROM_OCEANSFC3D(PRHO,PZFLUX,PTOP2D, &
+                                                PFLUX,PMASS)
+!
+REAL, DIMENSION(:,:,:), INTENT(IN)  :: PRHO      ! density
+REAL, DIMENSION(:,:,:), INTENT(IN)  :: PZFLUX    ! altitude of flux points
+REAL, DIMENSION(:,:)  , INTENT(IN)  :: PTOP2D ! Pressure at top domain
+REAL, DIMENSION(:,:,:), INTENT(OUT) :: PFLUX  ! Pressure at flux points
+REAL, DIMENSION(:,:,:), INTENT(OUT) :: PMASS  ! Pressure at mass points
+!
+END SUBROUTINE COMPUTE_PRESS_FROM_OCEANSFC3D
+END INTERFACE
+END MODULE MODI_COMPUTE_PRESS_FROM_OCEANSFC3D
+!     ####################################################################
+      SUBROUTINE COMPUTE_PRESS_FROM_OCEANSFC3D(PRHO,PZFLUX,PTOP2D,PFLUX,PMASS)
+!     ####################################################################
+!
+!!****  *COMPUTE_PRESS_FROM_OCEANSFC3D* - computation of hydrostatic
+!!                                 from model top
+!!
+!!    PURPOSE
+!!    -------
+!!
+!!**  METHOD
+!!    ------
+!!
+!!  1 The local Exner function in computed by integration of the hydrostatic
+!!    relation from top (PEXNTOP2D) to bottom.
+!!
+!!    dPI= -g/(Cpd thetav) dz
+!!
+!!  2 The Exner function at mass level is computed as follows and linearly
+!!    extrapolated for the uppest non-physical level:
+!!
+!!      ~           PI(k+1)-PI(k)
+!!     PI(k) = -----------------------
+!!                lnPI(k+1)-lnPI(k)
+!!
+!!
+!!    EXTERNAL
+!!    --------
+!!
+!!    IMPLICIT ARGUMENTS
+!!    ------------------
+!!
+!!      Module MODD_CONF      : contains configuration variables for all models.
+!!         NVERB : verbosity level for output-listing
+!!         LTHINSHELL : logical for thinshell approximation
+!!      Module MODD_LUNIT     :  contains logical unit names for all models
+!!         CLUOUT0 : name of output-listing
+!!      Module MODD_CST       : contains physical constants
+!!         XG  : gravity constant
+!!         XCPD: specific heat for dry air at constant pressure
+!!         XRD : gas constant for dry air
+!!      Module MODD_PARAMETERS
+!!         JPVEXT,JPHEXT
+!!
+!!    REFERENCE
+!!    ---------
+!!
+!!      Book 2
+!!
+!!    AUTHOR
+!!    ------
+!!  JLR
+!!
+!!    MODIFICATIONS
+!!    -------------
+!!      Original    01/01/21
+!-------------------------------------------------------------------------------
+!
+!* 0.    DECLARATIONS
+!        ------------
+!
+USE MODD_CST, ONLY : XG
+USE MODD_PARAMETERS, ONLY : JPVEXT
+!
+IMPLICIT NONE
+!
+!*       0.1   Declaration of arguments
+!              ------------------------
+!
+REAL, DIMENSION(:,:,:), INTENT(IN)  :: PRHO   ! density
+REAL, DIMENSION(:,:,:), INTENT(IN)  :: PZFLUX    ! altitude of flux points
+REAL, DIMENSION(:,:)  , INTENT(IN)  :: PTOP2D ! Pressure at domain
+REAL, DIMENSION(:,:,:), INTENT(OUT) :: PFLUX  ! Pressure at flux points
+REAL, DIMENSION(:,:,:), INTENT(OUT) :: PMASS  ! Pressure at mass points
+!
+!*       0.2   Declaration of local variables
+!              ------------------------------
+!
+INTEGER :: IKB,IKE,IKU,JK
+!-------------------------------------------------------------------------------
+!
+!*       1.    INITIALIZATIONS
+!              ---------------
+!
+IKB=JPVEXT+1
+IKE=SIZE(PZFLUX,3)-JPVEXT
+IKU=SIZE(PZFLUX,3)
+!-------------------------------------------------------------------------------
+!*       2.   COMPUTATION OF PRESSURE AT FLUX POINTS
+!             ------------------------------------------------
+PFLUX(:,:,IKE+1)=PTOP2D(:,:)
+!
+ DO JK=IKE,1,-1
+  PFLUX(:,:,JK) = PFLUX(:,:,JK+1) + XG*PRHO(:,:,JK)*(PZFLUX(:,:,JK+1)-PZFLUX(:,:,JK))
+ END DO
+ DO JK=IKE+2,SIZE(PFLUX,3)
+    PFLUX(:,:,JK) = PFLUX(:,:,JK-1) + XG*PRHO(:,:,JK-1)*(PZFLUX(:,:,JK-1)-PZFLUX(:,:,JK))
+ END DO
+!-------------------------------------------------------------------------------
+!
+!*       3.   COMPUTATION OF PRESSURE AT MASS POINTS
+!             --------------------------------------------
+ PMASS(:,:,1:IKU-1)=(PFLUX(:,:,1:IKU-1)-PFLUX(:,:,2:IKU))            &
+                     /(LOG(PFLUX(:,:,1:IKU-1))-LOG(PFLUX(:,:,2:IKU)))
+!accute extrapolation not possible as level IKU is in atmosphere. Assume rho_air=1.2 
+ PMASS(:,:,IKU)=  PMASS(:,:,IKU-1) - XG*1.2 * ( PZFLUX(:,:,IKU)-PZFLUX(:,:,IKU-1) )
+!-------------------------------------------------------------------------------
+!
+END SUBROUTINE COMPUTE_PRESS_FROM_OCEANSFC3D
+!     ##################################################################
+      SUBROUTINE COMPUTE_PRESS_FROM_OCEANSFC1D(PRHOD,PZFLUX,PTOP,PFLUX,PMASS)
+!     ##################################################################
+!
+!!****  *COMPUTE_PRESS_FROM_OCEANSFC1D* - computation of hydrostatic
+!!                                 Pressure from model top
+!!
+!!    PURPOSE
+!!    -------
+!!
+!!**  METHOD
+!!    ------
+!!
+!!    EXTERNAL
+!!    --------
+!!
+!!    IMPLICIT ARGUMENTS
+!!    ------------------
+!!
+!!    REFERENCE
+!!    ---------
+!!
+!!      Book 2
+!!
+!!    AUTHOR
+!!    ------
+!!
+!!      JLR
+!!
+!!    MODIFICATIONS
+!!    -------------
+!!      Original    01/01/21
+!-----------------------------------------------------------------------
+!
+!* 0.    DECLARATIONS
+!        ------------
+!
+USE MODI_COMPUTE_PRESS_FROM_OCEANSFC3D
+!
+IMPLICIT NONE
+!
+!*       0.1   Declaration of arguments
+!              ------------------------
+!
+REAL, DIMENSION(:), INTENT(IN)  :: PRHOD     ! virtual potential temperature
+REAL, DIMENSION(:), INTENT(IN)  :: PZFLUX    ! altitude of flux points
+REAL,               INTENT(IN)  :: PTOP   ! top pressure
+REAL, DIMENSION(:), INTENT(OUT) :: PFLUX  ! Pressure at flux points
+REAL, DIMENSION(:), INTENT(OUT) :: PMASS  ! Pressure at mass points
+!
+!*       0.2   Declaration of local variables
+!              ------------------------------
+!
+!JUAN
+REAL, DIMENSION(3,1,SIZE(PZFLUX))  :: ZRHOD     ! virtual potential temperature
+REAL, DIMENSION(3,1,SIZE(PZFLUX))  :: ZZFLUX    ! altitude of flux points
+REAL, DIMENSION(3,1)               :: ZPTOP   ! top pressure
+REAL, DIMENSION(3,1,SIZE(PZFLUX))  :: ZPFLUX  ! Pressure at flux points
+REAL, DIMENSION(3,1,SIZE(PZFLUX))  :: ZPMASS  ! Pressure at mass points
+INTEGER                            :: JI        ! loop index in I
+!JUAN
+!
+!-------------------------------------------------------------------------------
+!
+!JUAN
+DO JI=1,3
+ZRHOD(JI,1,:)=PRHOD(:)
+ZZFLUX(JI,1,:)=PZFLUX(:)
+ZPTOP(JI,1)=PTOP
+END DO
+!JUAN
+
+!
+CALL COMPUTE_PRESS_FROM_OCEANSFC3D(ZRHOD,ZZFLUX,ZPTOP,ZPFLUX,ZPMASS)
+!
+PFLUX(:)=ZPFLUX(2,1,:)
+PMASS(:)=ZPMASS(2,1,:)
+!
+!-------------------------------------------------------------------------------
+!
+END SUBROUTINE COMPUTE_PRESS_FROM_OCEANSFC1D
diff --git a/src/MNH/default_desfmn.f90 b/src/MNH/default_desfmn.f90
index f39f694235ad68d13968bc9bcef562f05e42aa95..2e9dd5730e72de76434299627dfbeabe0f4390c2 100644
--- a/src/MNH/default_desfmn.f90
+++ b/src/MNH/default_desfmn.f90
@@ -213,6 +213,7 @@ END MODULE MODI_DEFAULT_DESFM_n
 !  P-A Joulin  21/05/2021: add Wind turbines
 !  S. Riette   21/05/2021: add options to PDF subgrid scheme
 !                    05/2021 D. Ricard add the contribution of Leonard terms in the turbulence scheme
+!! JL Redelsperger 06/2021 add parameters allowing to active idealized oceanic convection
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
@@ -360,6 +361,7 @@ LUSERI    = .FALSE.
 LUSERS    = .FALSE.
 LUSERG    = .FALSE.
 LUSERH    = .FALSE.
+LOCEAN    = .FALSE.
 !NSV      = 0
 !NSV_USER = 0
 LUSECI    = .FALSE.
@@ -798,6 +800,11 @@ IF (KMI == 1) THEN
   XUTRANS            = 0.0
   XVTRANS            = 0.0
   LPGROUND_FRC       = .FALSE.
+  LDEEPOC   = .FALSE.
+  XCENTX_OC = 16000.
+  XCENTY_OC = 16000.
+  XRADX_OC  =  8000.  
+  XRADY_OC  =  8000.
 END IF
 !
 !-------------------------------------------------------------------------------
diff --git a/src/MNH/default_expre.f90 b/src/MNH/default_expre.f90
index 6c158a6c4e3d218dbae5664a8d1b8ebc00f8a0bf..f592e5205520b06147b8a117dab3c6f4b1d9bca7 100644
--- a/src/MNH/default_expre.f90
+++ b/src/MNH/default_expre.f90
@@ -95,6 +95,7 @@ END MODULE MODI_DEFAULT_EXPRE
 !!      add the uniform soil values                        05/02/96  (J.Stein)
 !!      removes default values for ground variables        26/11/96  (V.Masson)
 !!      add default value for LBOUSS                       11/07/13  (C.Lac)     
+!!      add default value LOCEAN LCOUPLES                    /03/21  (JL Redelsperger)
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
@@ -103,6 +104,7 @@ USE MODD_CONF           ! declarative modules
 USE MODD_DIM_n
 USE MODD_GRID
 USE MODD_REF
+USE MODD_DYN_n, ONLY : LOCEAN
 !
 IMPLICIT NONE
 !
@@ -140,7 +142,9 @@ XLATORI = 37.
 !*       4.    SET DEFAULT VALUES FOR MODD_REF :
 !              --------------------------------
 !
-LBOUSS = .FALSE.   
+LBOUSS = .FALSE.
+LOCEAN = .FALSE.
+LCOUPLES= .FALSE.
 !
 !-------------------------------------------------------------------------------
 !
diff --git a/src/MNH/dyn_sources.f90 b/src/MNH/dyn_sources.f90
index efc0e518999897364ba4ef04a6a3461289d00189..e79ff37a97716739a3be8b48dddd54c033bc5c9a 100644
--- a/src/MNH/dyn_sources.f90
+++ b/src/MNH/dyn_sources.f90
@@ -158,7 +158,8 @@ use modd_budget,      only: lbudget_u, lbudget_v, lbudget_w, lbudget_th, &
 USE MODD_CONF
 USE MODD_CST
 USE MODD_DYN
-
+USE MODD_DYN_n, ONLY : LOCEAN
+!
 use mode_budget,     only: Budget_store_init, Budget_store_end
 USE MODE_MPPDB
 
@@ -319,6 +320,7 @@ ELSE
 ENDIF
 !
 IF( .NOT.L1D ) THEN
+ IF (.NOT. LOCEAN) THEN
 !
   IF (KRR > 0) THEN
     if ( lbudget_th ) call Budget_store_init( tbudgets(NBUDGET_TH), 'PREF', prths(:, :, :) )
@@ -346,6 +348,7 @@ IF( .NOT.L1D ) THEN
 
     if ( lbudget_th ) call Budget_store_end( tbudgets(NBUDGET_TH), 'PREF', prths(:, :, :) )
   END IF
+ END IF
 !
 END IF
 !
diff --git a/src/MNH/emoist.f90 b/src/MNH/emoist.f90
index f58a1b32d2f6d7901b6c25f61edad0a0ddde339f..99a5e1ce0b994bdc27aa85e86b93a75ad21b1ea0 100644
--- a/src/MNH/emoist.f90
+++ b/src/MNH/emoist.f90
@@ -80,12 +80,14 @@ FUNCTION EMOIST(KRR,KRRI,PTHLM,PRM,PLOCPEXNM,PAMOIST,PSRCM) RESULT(PEMOIST)
 !!       J. Stein       Feb  28, 1996   optimization + Doctorization
 !!       J. Stein       Spet 15, 1996   Amoist previously computed
 !!       J.-P. Pinty    May  20, 2003   Improve EMOIST expression
+!!                  03/2021 (JL Redelsperger) Ocean model case 
 !! 
 !! ----------------------------------------------------------------------
 !
 !*       0. DECLARATIONS
 !           ------------
 USE MODD_CST
+USE MODD_DYN_n, ONLY : LOCEAN
 !
 IMPLICIT NONE
 !
@@ -118,14 +120,21 @@ INTEGER                               :: JRR     ! moist loop counter
 !
 !*       1. COMPUTE EMOIST
 !           --------------
-!
-!
-IF ( KRR == 0 ) THEN                                ! dry case
-  PEMOIST(:,:,:) = 0.
-ELSE IF ( KRR == 1 ) THEN                           ! only vapor
+IF (LOCEAN) THEN
+ IF ( KRR == 0 ) THEN                                ! Unsalted
+   PEMOIST(:,:,:) = 0.
+ ELSE
+   PEMOIST(:,:,:) = 1.                              ! Salted case
+ END IF
+!
+ELSE
+!
+ IF ( KRR == 0 ) THEN                                ! dry case
+   PEMOIST(:,:,:) = 0.
+ ELSE IF ( KRR == 1 ) THEN                           ! only vapor
   ZDELTA = (XRV/XRD) - 1.
   PEMOIST(:,:,:) = ZDELTA*PTHLM(:,:,:)
-ELSE                                                ! liquid water & ice present
+ ELSE                                                ! liquid water & ice present
   ZDELTA = (XRV/XRD) - 1.
   ZRW(:,:,:) = PRM(:,:,:,1)
 !
@@ -173,8 +182,9 @@ ELSE                                                ! liquid water & ice present
                             / (1. + ZRW(:,:,:))                                &
          ) * PAMOIST(:,:,:) * 2. * PSRCM(:,:,:)
   END IF
-END IF
+ END IF
 !
+END IF
 !---------------------------------------------------------------------------
 !
 END FUNCTION EMOIST
diff --git a/src/MNH/etheta.f90 b/src/MNH/etheta.f90
index 6c673cb978262ffe9cdb70251f4943f8b828cb0b..37f39873d08a4a5a37e032642d0ec36752909676 100644
--- a/src/MNH/etheta.f90
+++ b/src/MNH/etheta.f90
@@ -82,12 +82,13 @@ FUNCTION ETHETA(KRR,KRRI,PTHLM,PRM,PLOCPEXNM,PATHETA,PSRCM) RESULT(PETHETA)
 !!       J. Stein       Feb  28, 1996   optimization + Doctorization
 !!       J. Stein       Sept 15, 1996   Atheta previously computed
 !!       J.-P. Pinty    May  20, 2003   Improve ETHETA expression
-!!
+!!       J.L Redelsperger    03, 2021   Ocean Model Case 
 !! ----------------------------------------------------------------------
 !
 !*       0. DECLARATIONS
 !           ------------
 USE MODD_CST
+USE MODD_DYN_n, ONLY : LOCEAN
 !
 IMPLICIT NONE
 !
@@ -125,12 +126,15 @@ INTEGER                               :: JRR     ! moist loop counter
 !           --------------
 !
 !
-IF ( KRR == 0 ) THEN                                ! dry case
+IF (LOCEAN) THEN                                    ! ocean case
+   PETHETA(:,:,:) =  1.
+ELSE   
+ IF ( KRR == 0.) THEN                                ! dry case
   PETHETA(:,:,:) = 1.
-ELSE IF ( KRR == 1 ) THEN                           ! only vapor
+ ELSE IF ( KRR == 1 ) THEN                           ! only vapor
   ZDELTA = (XRV/XRD) - 1.
   PETHETA(:,:,:) = 1. + ZDELTA*PRM(:,:,:,1)
-ELSE                                                ! liquid water & ice present
+ ELSE                                                ! liquid water & ice present
   ZDELTA = (XRV/XRD) - 1.
   ZRW(:,:,:) = PRM(:,:,:,1)
 !
@@ -173,8 +177,9 @@ ELSE                                                ! liquid water & ice present
                             / (1. + ZRW(:,:,:))                                &
          ) * PATHETA(:,:,:) * 2. * PSRCM(:,:,:)
   END IF
-END IF
+ END IF
 !
+END IF
 !---------------------------------------------------------------------------
 !
 END FUNCTION ETHETA
diff --git a/src/MNH/gravity.f90 b/src/MNH/gravity.f90
index 72d0c1649e522a6b44541baa3b2ace50d7147061..27c8c3461514a02d0757bafaf6e5b7044bf1b447 100644
--- a/src/MNH/gravity.f90
+++ b/src/MNH/gravity.f90
@@ -100,7 +100,7 @@ END MODULE MODI_GRAVITY
 !!      C.Lac - March 2011 - Splitted  from dyn_sources
 !!      Q.Rodier 06/15 correction on budget
 !!      J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1
-!!
+!!      J.L. Redelsperger 03/2021 : Ocean model case
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
@@ -108,6 +108,8 @@ END MODULE MODI_GRAVITY
 !
 USE MODD_CONF
 USE MODD_CST
+USE MODD_REF
+USE MODD_DYN_n, ONLY : LOCEAN
 !
 USE MODI_SHUMAN
 USE MODI_GET_HALO
@@ -144,6 +146,16 @@ REAL, DIMENSION(SIZE(PTHT,1),SIZE(PTHT,2),SIZE(PTHT,3)) ::           &
 !
 IF( .NOT.L1D ) THEN     ! no buoyancy for 1D case
 !
+ IF (LOCEAN) THEN  !ocean case
+    CALL GET_HALO(PTHT)
+   IF(KRR > 0) THEN
+    CALL GET_HALO(PRT(:,:,:,1))
+    PRWS(:,:,:) = PRWS + XG * (XALPHAOC*MZM((PTHT - PTHVREF )*PRHODJ) &
+                           - XBETAOC*MZM((PRT(:,:,:,1) - XSA00OCEAN)*PRHODJ) )
+   ELSE ! unsalted case
+    PRWS(:,:,:) = PRWS + XG * XALPHAOC*MZM((PTHT - PTHVREF )*PRHODJ ) 
+   END IF
+ELSE   ! Atmospheric case
   IF(KRR > 0) THEN
 !
 !   compute the ratio : 1 + total water mass / dry air mass
@@ -156,7 +168,6 @@ IF( .NOT.L1D ) THEN     ! no buoyancy for 1D case
     END DO
 !
 !   compute the virtual potential temperature when water is present in any form
-!
     CALL GET_HALO(PTHT)
 !
     
@@ -171,6 +182,7 @@ IF( .NOT.L1D ) THEN     ! no buoyancy for 1D case
 !   compute the gravity term
 !
   PRWS(:,:,:) = PRWS + XG * MZM( ( (ZWORK2/PTHVREF) - 1. ) * PRHODJ )
+ END IF
 !
 !    the extrapolation for the PTHT and the THVREF must be the same at the
 !    ground
diff --git a/src/MNH/ini_cst.f90 b/src/MNH/ini_cst.f90
index 8ce239471ca9e449b35764ceb4c08f93e2ff3f8e..6c266aac10677013c673f9ea6db4aaff4096c59e 100644
--- a/src/MNH/ini_cst.f90
+++ b/src/MNH/ini_cst.f90
@@ -112,6 +112,13 @@ XG      = 9.80665
 !*	 4.     REFERENCE PRESSURE
 !	        -------------------
 !
+! Ocean model cst same as in 1D/CMO SURFEX
+! values used in init_cst to overwrite XP00 and XTH00
+XRH00OCEAN =1024. 
+XTH00OCEAN = 286.65
+XSA00OCEAN= 32.6
+XP00OCEAN = 201.E5
+!Atmospheric model
 XP00 = 1.E5
 XTH00 = 300.
 !-------------------------------------------------------------------------------
@@ -151,7 +158,11 @@ XALPW  = LOG(XESTT) + (XBETAW /XTT) + (XGAMW *LOG(XTT))
 XGAMI  = (XCI - XCPV) / XRV
 XBETAI = (XLSTT/XRV) + (XGAMI * XTT)
 XALPI  = LOG(XESTT) + (XBETAI /XTT) + (XGAMI *LOG(XTT))
-
+! Values identical to ones used in CMO1D in SURFEX /could be modified
+! Coefficient of thermal expansion of water (K-1)
+XALPHAOC = 1.9E-4
+! Coeff of Haline contraction coeff (S-1) 
+XBETAOC= 7.7475E-4
 !
 !   Some machine precision value depending of real4/8 use  
 !
diff --git a/src/MNH/ini_modeln.f90 b/src/MNH/ini_modeln.f90
index ef474931a1d41fac0bdb41bd9cc2506cce4976f3..e7dad9f4e8dfd044f03aef7edb721927b17abee6 100644
--- a/src/MNH/ini_modeln.f90
+++ b/src/MNH/ini_modeln.f90
@@ -292,6 +292,7 @@ END MODULE MODI_INI_MODEL_n
 !  S. Riette      04/2020: XHL* fields
 !  F. Auguste     02/2021: add IBM
 !  T.Nigel        02/2021: add turbulence recycling
+! J.L.Redelsperger 06/2011: OCEAN case
 !---------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
@@ -370,6 +371,7 @@ USE MODD_NESTING,           only: CDAD_NAME, NDAD, NDT_2_WAY, NDTRATIO, NDXRATIO
 USE MODD_NSV
 USE MODD_NSV
 USE MODD_NUDGING_n,         only: LNUDGING
+USE MODD_OCEANH
 USE MODD_OUT_n
 USE MODD_PARAMETERS
 USE MODD_PARAM_KAFR_n
@@ -528,7 +530,7 @@ REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZIBM_LS ! LevelSet IBM
 !
 INTEGER, DIMENSION(:,:),ALLOCATABLE :: IINDEX   ! indices of non-zero terms
 INTEGER, DIMENSION(:),ALLOCATABLE   :: IIND
-INTEGER                             :: JM
+INTEGER                             :: JM, JT
 !
 !------------------------------------------
 ! Dummy pointers needed to correct an ifort Bug
@@ -971,11 +973,19 @@ ALLOCATE(XDZZ(IIU,IJU,IKU))
 !
 !*       3.3   Modules MODD_REF and  MODD_REF_n
 !
-IF (KMI == 1) THEN
+! different reference state for O and A models
+!  POur le moment meme etat de ref O et A
+!IF ((KMI == 1).OR.LCOUPLES) THEN
+IF (KMI==1) THEN
   ALLOCATE(XRHODREFZ(IKU),XTHVREFZ(IKU))
+ELSE IF (LCOUPLES) THEN
+! in coupled O-A case, need different variables for ocean
+  ALLOCATE(XRHODREFZO(IKU),XTHVREFZO(IKU))
 ELSE
   !Do not allocate XRHODREFZ and XTHVREFZ because they are the same on all grids (not 'n' variables)
 END IF
+!
+ALLOCATE(XPHIT(IIU,IJU,IKU))
 ALLOCATE(XRHODREF(IIU,IJU,IKU))
 ALLOCATE(XTHVREF(IIU,IJU,IKU))
 ALLOCATE(XEXNREF(IIU,IJU,IKU))
@@ -1830,7 +1840,7 @@ IF (CCLOUD=='LIMA') CALL INIT_AEROSOL_PROPERTIES
 !              --------------------------------
 !
 CALL MPPDB_CHECK3D(XUT,"INI_MODEL_N-before read_field::XUT",PRECISION)
-CALL READ_FIELD(TPINIFILE,IIU,IJU,IKU,                                        &
+CALL READ_FIELD(KMI,TPINIFILE,IIU,IJU,IKU,                                        &
                 CGETTKET,CGETRVT,CGETRCT,CGETRRT,CGETRIT,CGETCIT,CGETZWS,     &
                 CGETRST,CGETRGT,CGETRHT,CGETSVT,CGETSRCT,CGETSIGS,CGETCLDFR,  &
                 CGETBL_DEPTH,CGETSBL_DEPTH,CGETPHC,CGETPHR,CUVW_ADV_SCHEME,   &
@@ -2229,10 +2239,14 @@ ALLOCATE(ZSCA_ALB(IIU,IJU,NSWB_MNH))
 ALLOCATE(ZEMIS  (IIU,IJU,NLWB_MNH))
 ALLOCATE(ZTSRAD (IIU,IJU))
 !
-IF ((TPINIFILE%NMNHVERSION(1)==4 .AND. TPINIFILE%NMNHVERSION(2)>=6) .OR. TPINIFILE%NMNHVERSION(1)>4) THEN
-  CALL IO_Field_read(TPINIFILE,'SURF',CSURF)
+IF (LCOUPLES.AND.(KMI>1))THEN
+  CSURF ="NONE"
 ELSE
-  CSURF = "EXTE"
+  IF ((TPINIFILE%NMNHVERSION(1)==4 .AND. TPINIFILE%NMNHVERSION(2)>=6) .OR. TPINIFILE%NMNHVERSION(1)>4) THEN
+    CALL IO_Field_read(TPINIFILE,'SURF',CSURF)
+  ELSE
+    CSURF = "EXTE"
+  END IF
 END IF
 !
 !
@@ -2601,5 +2615,19 @@ IF (LMAIN_EOL .AND. KMI == NMODEL_EOL) THEN
  END SELECT
 END IF
 !
+!*     33.  Auto-coupling Atmos-Ocean LES NH
+!
+IF (LCOUPLES) THEN
+ ALLOCATE(XSSUFL_C(IIU,IJU,1)); XSSUFL_C=0.0
+ ALLOCATE(XSSVFL_C(IIU,IJU,1)); XSSVFL_C=0.0
+ ALLOCATE(XSSTFL_C(IIU,IJU,1)); XSSTFL_C=0.0
+ ALLOCATE(XSSRFL_C(IIU,IJU,1)); XSSRFL_C=0.
+ELSE
+ ALLOCATE(XSSUFL_C(0,0,0))
+ ALLOCATE(XSSVFL_C(0,0,0))
+ ALLOCATE(XSSTFL_C(0,0,0))
+ ALLOCATE(XSSRFL_C(0,0,0))
+END IF
+!
 END SUBROUTINE INI_MODEL_n
 
diff --git a/src/MNH/ini_one_wayn.f90 b/src/MNH/ini_one_wayn.f90
index fffb5f8d6f5bd2a47ea253c49cd177eb765a4e8b..49932a2494dab21ec0048fb1f6f6c81090bfcef5 100644
--- a/src/MNH/ini_one_wayn.f90
+++ b/src/MNH/ini_one_wayn.f90
@@ -90,7 +90,7 @@ SUBROUTINE INI_ONE_WAY_n(KDAD,KMI,                                       &
 !  P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg
 !  P. Wautelet 03/05/2019: restructuration of one_wayn and ini_one_wayn
 !  P. Wautelet 04/06/2020: correct call to Set_conc_lima + initialize ZCONCM
-!
+!  J-L Redelsperger 06/2021: add Ocean coupling
 !------------------------------------------------------------------------------
 !
 !*      0.   DECLARATIONS
@@ -106,6 +106,7 @@ USE MODD_NSV,            only: NSV_A, NSV_C1R3BEG_A, NSV_C1R3_A, NSV_C2R2BEG_A,
                                NSV_SLTBEG_A, NSV_SLTDEPBEG_A, NSV_SLTDEP_A, NSV_SLT_A, NSV_USER_A
 
 USE MODD_PARAM_n,        only: CCLOUD
+USE MODD_REF,            ONLY: LCOUPLES
 USE MODD_REF_n,          only: XRHODJ, XRHODREF
 !
 use mode_bikhardt
@@ -183,6 +184,20 @@ REAL,    DIMENSION(:,:,:,:), ALLOCATABLE :: ZCHEMM  ! chemical concentrations
 REAL,    DIMENSION(:,:,:,:), ALLOCATABLE :: ZCHEMMI  ! chemical ice phase concentrations
 !-------------------------------------------------------------------------------
 !
+IF (LCOUPLES) THEN
+   PLBXUM=0.
+   PLBXVM=0.
+   PLBXWM=0.
+   PLBXTHM=0.
+   PLBYTHM=0.
+   PLBXTKEM=0.
+   PLBYTKEM =0.
+   PLBXRM =0.
+   PLBYRM=0.
+   PLBXSVM =0.
+   PLBYSVM=0. 
+RETURN
+ENDIF
 !*      0.   INITIALISATION
 ! 
 CALL GOTO_MODEL(KDAD)
diff --git a/src/MNH/ini_segn.f90 b/src/MNH/ini_segn.f90
index e0819946a423f1d3026e954ffd933dadeafd362f..b852d82f0f227c7b6c6217967fd71af257636fb3 100644
--- a/src/MNH/ini_segn.f90
+++ b/src/MNH/ini_segn.f90
@@ -172,6 +172,7 @@ END MODULE MODI_INI_SEG_n
 USE MODD_CONF
 USE MODD_CONF_n,           ONLY: CSTORAGE_TYPE
 USE MODN_CONFZ
+USE MODD_DYN_n, ONLY : LOCEAN
 USE MODD_DYN
 USE MODD_IO,               ONLY: NVERB_FATAL, NVERB_WARNING, TFILE_OUTPUTLISTING, TFILEDATA
 USE MODD_LUNIT
@@ -440,6 +441,8 @@ END IF
 ! routine which read related informations in the EXSEG descriptor in order to 
 ! check coherence between both informations.
 !
+CALL IO_Field_read(TPINIFILE,'LOCEAN',LOCEAN)
+!
 CALL READ_EXSEG_n(KMI,TZFILE_DES,YCONF,GFLAT,GUSERV,GUSERC,                 &
                 GUSERR,GUSERI,GUSECI,GUSERS,GUSERG,GUSERH,GUSECHEM,         &
                 GUSECHAQ,GUSECHIC,GCH_PH,                                   &
diff --git a/src/MNH/ini_sizen.f90 b/src/MNH/ini_sizen.f90
index 5e21aeeaffa449c582206864c825cfdfaaa846be..caad447cacd9e7ecdeab6d7253e5b16c52dfcf29 100644
--- a/src/MNH/ini_sizen.f90
+++ b/src/MNH/ini_sizen.f90
@@ -112,6 +112,7 @@ USE MODD_LUNIT_n,       ONLY: CINIFILE, CINIFILEPGD, TLUOUT
 USE MODD_NESTING,       ONLY: CMY_NAME, CDAD_NAME, NDAD, NDXRATIO_ALL, NDYRATIO_ALL, &
                               NXOR_ALL, NYOR_ALL, NXEND_ALL,NYEND_ALL
 USE MODD_PARAMETERS,    ONLY: JPMODELMAX, JPHEXT,JPVEXT
+USE MODD_REF,           ONLY: LCOUPLES
 !
 USE MODE_IO,            ONLY: IO_Pack_set
 USE MODE_IO_FIELD_READ, only: IO_Field_read
@@ -164,6 +165,12 @@ IF (IRESP /= 0)  THEN
 END IF
 !
 IF ( KMI > 1 ) THEN
+    IF (LCOUPLES) THEN
+      IF (KMI==2) THEN
+        CMY_NAME(NDAD(KMI)) =  CDAD_NAME(KMI)
+        WRITE(UNIT=ILUOUT,FMT=*) 'NDAD',NDAD(KMI),'changed in '//TRIM(CMY_NAME(NDAD(KMI)))//TRIM(CDAD_NAME(KMI)),KMI
+      END IF
+    END IF
   IF ( TRIM(CDAD_NAME(KMI)) /= TRIM(CMY_NAME(NDAD(KMI))) ) THEN
     WRITE(UNIT=ILUOUT,FMT=9005) NDAD(KMI)
     WRITE(ILUOUT,FMT=*) ' THE INITIAL FM-File IS NOT CONSISTANT WITH THE ONE OF THE DAD MODEL!'
diff --git a/src/MNH/ini_tke_eps.f90 b/src/MNH/ini_tke_eps.f90
index c76c795b5e67772a14cd56384910110c2a55a010..5bdd3d5755ae688cf9d4de32d04a0d9f1844fd28 100644
--- a/src/MNH/ini_tke_eps.f90
+++ b/src/MNH/ini_tke_eps.f90
@@ -84,18 +84,20 @@ END MODULE MODI_INI_TKE_EPS
 !!                          Aug 10, 1998 (N. Asencio) add parallel code
 !!                          May 2006  Remove KEPS
 !  P. Wautelet 20/05/2019: add name argument to ADDnFIELD_ll + new ADD4DFIELD_ll subroutine
+!!                          March 2021 (JL Redelsperger) Add Ocean LES case)
 !! -------------------------------------------------------------------------
 !
 !*          0. DECLARATIONS
 !              ------------
 !
-USE MODD_CTURB      ! XLINI, XCED, XCMFS, XTKEMIN
-USE MODD_CST        ! XG, XRD,  XRV
-USE MODD_PARAMETERS ! JPVEXT
+USE MODD_CTURB,      ONLY : XLINI, XCED, XCMFS, XTKEMIN, XCSHF
+USE MODD_CST,        ONLY : XG, XRD, XRV, XALPHAOC
+USE MODD_PARAMETERS, ONLY : JPVEXT
+USE MODD_DYN_n,      ONLY : LOCEAN
 !
-USE MODI_SHUMAN     ! DZF, MXF, MYF, MZM
+USE MODI_SHUMAN,     ONLY : DZF, MXF, MYF, MZM
 USE MODE_ll
-USE MODD_ARGSLIST_ll, ONLY : LIST_ll
+USE MODD_ARGSLIST_ll,ONLY : LIST_ll
 !
 IMPLICIT NONE
 !
@@ -148,11 +150,20 @@ IF (HGETTKET == 'INIT' ) THEN
   PVT(:,:,IKE+1)  = PVT(:,:,IKE)
   !
   ! determines TKE
+  ! Equilibrium/Stationary/neutral 1D TKE equation
+IF (LOCEAN) THEN
+  PTKET(:,:,:)=(XLINI**2/XCED)*(  &
+                  XCMFS*( DZF(MXF(MZM(PUT)))**2                  &
+                         +DZF(MYF(MZM(PVT)))**2) / ZDELTZ        &
+                 -(XG*XALPHAOC)*XCSHF*DZF(MZM(PTHT))              &
+                               ) / ZDELTZ
+ELSE   
   PTKET(:,:,:)=(XLINI**2/XCED)*(  &
                   XCMFS*( DZF(MXF(MZM(PUT)))**2                  &
                          +DZF(MYF(MZM(PVT)))**2) / ZDELTZ        &
                  -(XG/PTHVREF)*XCSHF*DZF(MZM(PTHT))              &
                                ) / ZDELTZ
+END IF
   ! positivity control
   WHERE (PTKET < XTKEMIN) PTKET=XTKEMIN
   !
diff --git a/src/MNH/init_mnh.f90 b/src/MNH/init_mnh.f90
index 7b7d49a3aa77d54df4e93992845fcadb816821c2..e275487920bccbf19c22ec93e4dc0e1b880f9279 100644
--- a/src/MNH/init_mnh.f90
+++ b/src/MNH/init_mnh.f90
@@ -76,13 +76,15 @@
 !*       0.    DECLARATIONS
 !              ------------
 USE MODD_CONF
-USE MODD_DYN_n, ONLY: CPRESOPT,NITR ! only for spawning purpose
+USE MODD_CST, ONLY:XP00,XTH00,XP00OCEAN,XTH00OCEAN
+USE MODD_DYN_n, ONLY: CPRESOPT,NITR,LOCEAN ! only for spawning purpose
 USE MODD_IO,    ONLY: TFILE_OUTPUTLISTING, TPTR2FILE
 USE MODD_LBC_n, ONLY: CLBCX,CLBCY   ! only for spawning purpose
 USE MODD_LUNIT
 USE MODD_LUNIT_n
 USE MODD_MNH_SURFEX_n
 USE MODD_PARAMETERS
+USE MODD_REF
 !
 use mode_field,            only: Alloc_field_scalars, Fieldlist_goto_model
 USE MODE_IO_FILE,          ONLY: IO_File_open
@@ -180,6 +182,13 @@ END IF
 !
 IF (CPROGRAM=='DIAG') CALL RESET_EXSEG()
 !
+! UPDATE CONSTANTS FOR OCEAN MODEL
+DO JMI=1,JPMODELMAX
+  IF (LOCEAN) THEN
+    XP00=XP00OCEAN
+    XTH00=XTH00OCEAN
+  END IF
+END DO
 !-------------------------------------------------------------------------------
 !
 !
diff --git a/src/MNH/modd_cst.f90 b/src/MNH/modd_cst.f90
index f6bc6c52f04bc35604a71222dbf354c17bda4d84..6832448e4008da354f7372b48bd03b6225af5a99 100644
--- a/src/MNH/modd_cst.f90
+++ b/src/MNH/modd_cst.f90
@@ -42,6 +42,7 @@
 !!      C. Mari     31/10/00  add NDAYSEC
 !!      V. Masson   01/03/03  add conductivity of ice
 !!      J.Escobar : 10/2017 : for real*4 , add XMNH_HUGE_12_LOG
+!!      J.L. Redelsperger 03/2021  add constants for ocean penetrating solar
 !-------------------------------------------------------------------------------
 !
 !*       0.   DECLARATIONS
@@ -63,6 +64,8 @@ REAL,SAVE :: XRADIUS,XOMEGA     ! Earth radius, earth rotation
 REAL,SAVE :: XG                 ! Gravity constant
 !
 REAL,SAVE :: XP00               ! Reference pressure
+REAL,SAVE :: XP00OCEAN          ! Reference pressurefor ocean model
+REAL,SAVE :: XRH00OCEAN         ! Reference density for ocean model
 !
 REAL,SAVE :: XSTEFAN,XI0        ! Stefan-Boltzman constant, solar constant
 !
@@ -83,8 +86,19 @@ REAL,SAVE :: XALPW,XBETAW,XGAMW ! Constants for saturation vapor
 REAL,SAVE :: XALPI,XBETAI,XGAMI ! Constants for saturation vapor
                                 !  pressure  function over solid ice
 REAL,SAVE :: XCONDI             ! thermal conductivity of ice (W m-1 K-1)
-REAL, SAVE        :: XTH00      ! reference value  for the potential
-                                ! temperature
+REAL,SAVE :: XALPHAOC           ! thermal expansion coefficient for ocean (K-1)
+REAL,SAVE :: XBETAOC             ! Haline contraction coeff for ocean (S-1)
+REAL,SAVE :: XTH00              ! reference value  for the potential temperature
+REAL,SAVE :: XTH00OCEAN         ! Ref value for pot temp in ocean model
+REAL,SAVE :: XSA00OCEAN         ! Ref value for SAlinity in ocean model 
+REAL,SAVE :: XROC=0.69! 3 coeffs for SW penetration in  Ocean (Hoecker et al)
+REAL,SAVE :: XD1=1.1
+REAL,SAVE :: XD2=23.
+! Values used in SURFEX CMO
+!REAL,SAVE :: XROC=0.58
+!REAL,SAVE :: XD1=0.35
+!REAL,SAVE :: XD2=23.
+
 REAL,SAVE :: XRHOLI             ! Volumic mass of liquid water
 !
 INTEGER, SAVE :: NDAYSEC        ! Number of seconds in a day
diff --git a/src/MNH/modd_dynn.f90 b/src/MNH/modd_dynn.f90
index c3b64335c44521991cc06f96a9825de59183ca7c..60d8cfc76f9bea08cd3737a559ae18ddd371f3d5 100644
--- a/src/MNH/modd_dynn.f90
+++ b/src/MNH/modd_dynn.f90
@@ -43,6 +43,7 @@
 !!      Modification    01/2016  (JP Pinty) Add LIMA
 !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
 !!      Modification    07/2017  (V. Vionnet)    Add blowing snow variable
+!!      Modification    03/2021   (JL Redelsperger) Add logical LOCEAN
 !-------------------------------------------------------------------------------
 !
 !*       0.   DECLARATIONS
@@ -55,6 +56,7 @@ TYPE DYN_t
 !
   INTEGER :: NSTOP          ! Number of time step
   REAL    :: XTSTEP         ! Time step
+  LOGICAL   :: LOCEAN
 !
 !++++++++++++++++++++++++++++++++++
 !PART USED BY THE PRESSURE SOLVER
@@ -194,6 +196,7 @@ CHARACTER(LEN=5), POINTER :: CPRESOPT=>NULL()
 INTEGER, POINTER :: NITR=>NULL()
 LOGICAL, POINTER :: LITRADJ=>NULL()
 LOGICAL, POINTER :: LRES=>NULL()
+LOGICAL, POINTER :: LOCEAN=>NULL()
 REAL, POINTER :: XRES=>NULL()
 REAL, POINTER :: XRELAX=>NULL()
 REAL, POINTER :: XDXHATM=>NULL()
@@ -297,6 +300,7 @@ CPRESOPT=>DYN_MODEL(KTO)%CPRESOPT
 NITR=>DYN_MODEL(KTO)%NITR
 LITRADJ=>DYN_MODEL(KTO)%LITRADJ
 LRES=>DYN_MODEL(KTO)%LRES          
+LOCEAN=>DYN_MODEL(KTO)%LOCEAN
 XRES=>DYN_MODEL(KTO)%XRES
 XRELAX=>DYN_MODEL(KTO)%XRELAX
 XDXHATM=>DYN_MODEL(KTO)%XDXHATM
diff --git a/src/MNH/modd_fieldn.f90 b/src/MNH/modd_fieldn.f90
index e5a933bbae17aa91b3be17c35e5ebb969dca0272..3b75c92ecbe1330d283d24e1579d24c121415ab7 100644
--- a/src/MNH/modd_fieldn.f90
+++ b/src/MNH/modd_fieldn.f90
@@ -147,6 +147,7 @@ REAL, DIMENSION(:,:,:), POINTER :: XSSPRO=>NULL()
 REAL, DIMENSION(:,:,:), POINTER :: XTKET=>NULL()
 REAL, DIMENSION(:,:,:), POINTER :: XRTKES=>NULL()
 REAL, DIMENSION(:,:,:), POINTER :: XPABST=>NULL()
+REAL, DIMENSION(:,:,:), POINTER :: XPHIT=>NULL()   
 REAL, DIMENSION(:,:,:,:), POINTER :: XRT=>NULL()
 REAL, DIMENSION(:,:,:,:), POINTER :: XRRS=>NULL()
 REAL, DIMENSION(:,:,:,:), POINTER :: XRRS_CLD=>NULL()
@@ -252,6 +253,7 @@ XRTHS=>FIELD_MODEL(KTO)%XRTHS
 !XTKET=>FIELD_MODEL(KTO)%XTKET !Done in FIELDLIST_GOTO_MODEL
 XRTKES=>FIELD_MODEL(KTO)%XRTKES
 !XPABST=>FIELD_MODEL(KTO)%XPABST !Done in FIELDLIST_GOTO_MODEL
+!XPHIT=>FIELD_MODEL(KTO)%XPHIT
 !XRT=>FIELD_MODEL(KTO)%XRT !Done in FIELDLIST_GOTO_MODEL
 XRRS=>FIELD_MODEL(KTO)%XRRS
 !XRRS_CLD=>FIELD_MODEL(KTO)%XRRS_CLD !Done in FIELDLIST_GOTO_MODEL
diff --git a/src/MNH/modd_frc.f90 b/src/MNH/modd_frc.f90
index a430ad6034fce90152a49a63052db13cb2f87e2b..1e4b6c7ff5b91c4440abf45ce1f5b9e2bfe29281 100644
--- a/src/MNH/modd_frc.f90
+++ b/src/MNH/modd_frc.f90
@@ -45,6 +45,7 @@
 !!                             add SST and surface pressure forcing
 !!      01/2004  V. Masson     surface externalization: removes SST forcing
 !!                   09/2017 Q.Rodier add LTEND_UV_FRC
+!!      03/2021 JL Redelsperger Parameters defining sfc forcing shape for idealized ocean case
 !-------------------------------------------------------------------------------
 !
 !*       0.   DECLARATIONS
@@ -83,7 +84,7 @@ REAL, SAVE, DIMENSION(:,:), ALLOCATABLE :: XTENDVFRC   ! large scale V tendency
 LOGICAL, SAVE     :: LGEOST_UV_FRC      ! enables geostrophic wind term
 LOGICAL, SAVE     :: LGEOST_TH_FRC      ! enables thermal wind advection
 LOGICAL, SAVE     :: LTEND_THRV_FRC     ! enables tendency forcing
-LOGICAL, SAVE     :: LTEND_UV_FRC     ! enables tendency forcing of the wind
+LOGICAL, SAVE     :: LTEND_UV_FRC       ! enables tendency forcing of the wind
 LOGICAL, SAVE     :: LVERT_MOTION_FRC   ! enables prescribed a forced vertical
 					                    ! transport for all prognostic variables
 LOGICAL, SAVE     :: LRELAX_THRV_FRC    ! enables temp. and humidity relaxation
@@ -100,5 +101,10 @@ LOGICAL, SAVE     :: LTRANS             ! enables a Galilean translation of the
                                         !         domain of simulation
 LOGICAL, SAVE     :: LPGROUND_FRC       ! enables surf. pressure forcing
 !
+LOGICAL, SAVE     :: LDEEPOC            ! activates sfc forcing for ideal ocean deep conv 
+REAL,    SAVE     :: XCENTX_OC          ! center of sfc forc for ideal ocean
+REAL,    SAVE     :: XRADX_OC           ! radius of sfc forc for ideal ocean
+REAL,    SAVE     :: XCENTY_OC          ! center of sfc forc for ideal ocean
+REAL,    SAVE     :: XRADY_OC           ! radius of sfc forc for ideal ocean
 !
 END MODULE MODD_FRC
diff --git a/src/MNH/modd_oceanh.f90 b/src/MNH/modd_oceanh.f90
new file mode 100644
index 0000000000000000000000000000000000000000..f53e2063ebba8c04c39d0d32e51137c3234839d9
--- /dev/null
+++ b/src/MNH/modd_oceanh.f90
@@ -0,0 +1,47 @@
+!MNH_LIC Copyright 1996-2021 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 MODD_OCEANH
+!     #################
+!
+!!****  *MODD_OCEAN* - declaration of variables used in ocean version
+!!
+!!    PURPOSE
+!!    -------
+!       Declarative module for the variables
+!!      at interface for OCEAN LES MESONH version including auto-coupling O-A LES
+!
+!!
+!!**  IMPLICIT ARGUMENTS
+!!    ------------------
+!!      None 
+!!
+!!    AUTHOR
+!!    ------
+!!    JL Redelsperger LOPS
+!!   
+!!    MODIFICATIONS
+!!    -------------
+!!      Original 03/2021
+!
+!*       0.   DECLARATIONS
+!             ------------
+        !
+USE MODD_TYPE_DATE
+!
+IMPLICIT NONE
+!
+!*            fields for Sea Sfc FORCINGs
+!             ------------------
+!
+INTEGER,          SAVE                  :: NFRCLT     ! number of sea surface forcings PLUS 1
+INTEGER,          SAVE                  :: NINFRT     ! Interval in second between forcings
+TYPE (DATE_TIME), SAVE, DIMENSION(:), ALLOCATABLE :: TFRCLT ! date/time of sea surface forcings
+REAL, SAVE, DIMENSION(:,:), ALLOCATABLE ::  XSSUFL,XSSVFL,XSSTFL,XSSOLA ! Time evol Flux U V T Solar_Rad at sea surface
+REAL, SAVE, DIMENSION(:,:), ALLOCATABLE :: XSSUFL_XY,XSSVFL_XY,XSSTFL_XY! XY flux shape
+REAL, SAVE, DIMENSION(:), ALLOCATABLE :: XSSUFL_T,XSSVFL_T,XSSTFL_T,XSSOLA_T ! given time forcing fluxes
+!
+END MODULE MODD_OCEANH
diff --git a/src/MNH/modd_ref.f90 b/src/MNH/modd_ref.f90
index 8b2f932878b87b893353170624ea8473cf167f79..206898425df34d55fb0f8a0f1120fe7f0b327132 100644
--- a/src/MNH/modd_ref.f90
+++ b/src/MNH/modd_ref.f90
@@ -46,6 +46,13 @@ REAL,SAVE, DIMENSION(:), ALLOCATABLE, TARGET :: XRHODREFZ ! rhod(z) for referenc
 REAL,SAVE, DIMENSION(:), ALLOCATABLE, TARGET :: XTHVREFZ  ! Thetav(z) for reference
                                              ! state without orography    
 REAL,SAVE                            :: XEXNTOP   ! Exner function at model top 
+!
+! For coupled A-O case
+REAL,SAVE, DIMENSION(:), ALLOCATABLE, TARGET :: XRHODREFZO! rhod(z) for ocean ref state in coupled mode
+REAL,SAVE, DIMENSION(:), ALLOCATABLE, TARGET :: XTHVREFZO !Thetav(z) for ocean ref state in coupled mode
+REAL,SAVE                            :: XEXNTOPO   ! Exner function at ocean  model top in coupled mode
+!
 LOGICAL, SAVE                        :: LBOUSS    ! Boussinesq approximation
+LOGICAL, SAVE   ::LCOUPLES ! AUTOCOUPLED ATMS-OCEAN LES VERSION
 ! 
 END MODULE MODD_REF
diff --git a/src/MNH/modd_turbn.f90 b/src/MNH/modd_turbn.f90
index ac0b49ae30cbb2ee5af3243352036ed35f538986..5b938a6bdec96d14a3135984b12337506f22c753 100644
--- a/src/MNH/modd_turbn.f90
+++ b/src/MNH/modd_turbn.f90
@@ -40,6 +40,7 @@
 !!      C.Lac        Nov 2014      add terms of TKE production for LES diag
 !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
 !!      D. Ricard     May 2021      add the switches for Leonard terms
+!!    JL Redelsperger  03/2021   Add O-A flux for auto-coupled LES case
 !!
 !-------------------------------------------------------------------------------
 !
@@ -94,6 +95,10 @@ TYPE TURB_t
   REAL, DIMENSION(:,:,:), POINTER :: XTR=>NULL()    ! Transport production of Kinetic energy
   REAL, DIMENSION(:,:,:), POINTER :: XDISS=>NULL()    ! Dissipation of Kinetic energy
   REAL, DIMENSION(:,:,:), POINTER :: XLEM=>NULL()    ! Mixing length
+  REAL, DIMENSION(:,:,:), POINTER :: XSSUFL_C=>NULL() ! O-A interface flux for u
+  REAL, DIMENSION(:,:,:), POINTER :: XSSVFL_C=>NULL() ! O-A interface flux for v
+  REAL, DIMENSION(:,:,:), POINTER :: XSSTFL_C=>NULL() ! O-A interface flux for theta
+  REAL, DIMENSION(:,:,:), POINTER :: XSSRFL_C=>NULL() ! O-A interface flux for vapor
   LOGICAL            :: LHGRAD ! logical switch for the computation of the Leornard Terms
   REAL               :: XCOEFHGRADTHL  ! coeff applied to thl contribution
   REAL               :: XCOEFHGRADRM  ! coeff applied to mixing ratio contribution
@@ -133,6 +138,10 @@ REAL, DIMENSION(:,:,:), POINTER :: XTHP=>NULL()
 REAL, DIMENSION(:,:,:), POINTER :: XTR=>NULL()
 REAL, DIMENSION(:,:,:), POINTER :: XDISS=>NULL()
 REAL, DIMENSION(:,:,:), POINTER :: XLEM=>NULL()
+REAL, DIMENSION(:,:,:), POINTER :: XSSUFL_C=>NULL()
+REAL, DIMENSION(:,:,:), POINTER :: XSSVFL_C=>NULL()
+REAL, DIMENSION(:,:,:), POINTER :: XSSTFL_C=>NULL()
+REAL, DIMENSION(:,:,:), POINTER :: XSSRFL_C=>NULL()
 LOGICAL, POINTER :: LHGRAD=>NULL()
 REAL, POINTER :: XCOEFHGRADTHL=>NULL()
 REAL, POINTER :: XCOEFHGRADRM=>NULL()
@@ -154,6 +163,10 @@ TURB_MODEL(KFROM)%XTHP=>XTHP
 TURB_MODEL(KFROM)%XTR=>XTR 
 TURB_MODEL(KFROM)%XDISS=>XDISS
 TURB_MODEL(KFROM)%XLEM=>XLEM
+TURB_MODEL(KFROM)%XSSUFL_C=>XSSUFL_C
+TURB_MODEL(KFROM)%XSSVFL_C=>XSSVFL_C
+TURB_MODEL(KFROM)%XSSTFL_C=>XSSTFL_C
+TURB_MODEL(KFROM)%XSSRFL_C=>XSSRFL_C
 !
 ! Current model is set to model KTO
 XIMPL=>TURB_MODEL(KTO)%XIMPL
@@ -183,6 +196,10 @@ XTHP=>TURB_MODEL(KTO)%XTHP
 XTR=>TURB_MODEL(KTO)%XTR  
 XDISS=>TURB_MODEL(KTO)%XDISS
 XLEM=>TURB_MODEL(KTO)%XLEM
+XSSUFL_C=>TURB_MODEL(KTO)%XSSUFL_C
+XSSVFL_C=>TURB_MODEL(KTO)%XSSVFL_C
+XSSTFL_C=>TURB_MODEL(KTO)%XSSTFL_C
+XSSRFL_C=>TURB_MODEL(KTO)%XSSRFL_C
 LHGRAD=>TURB_MODEL(KTO)%LHGRAD
 XCOEFHGRADTHL=>TURB_MODEL(KTO)%XCOEFHGRADTHL
 XCOEFHGRADRM=>TURB_MODEL(KTO)%XCOEFHGRADRM
diff --git a/src/MNH/modeln.f90 b/src/MNH/modeln.f90
index 0c5a12fef4a4452c662ba91efc49b836ede28e44..91b86154ebc81cc6916f2c245bb57367683a7ae0 100644
--- a/src/MNH/modeln.f90
+++ b/src/MNH/modeln.f90
@@ -271,6 +271,7 @@ END MODULE MODI_MODEL_n
 !  F. Auguste  01/02/2021: add IBM
 !  T. Nagel    01/02/2021: add turbulence recycling
 !  P. Wautelet 19/02/2021 add NEGA2 term for SV budgets
+!  J.L. Redelsperger 03/2021, add Call NHOA_COUPLN (coupling O & A LES version)
 !!-------------------------------------------------------------------------------
 !
 !*       0.     DECLARATIONS
@@ -349,6 +350,7 @@ USE MODD_PROFILER_n
 USE MODD_RADIATIONS_n,   ONLY: XTSRAD,XSCAFLASWD,XDIRFLASWD,XDIRSRFSWD, XAER, XDTHRAD
 USE MODD_RAIN_ICE_DESCR, ONLY: XRTMIN
 USE MODD_RECYCL_PARAM_n
+USE MODD_REF
 USE MODD_REF_n
 USE MODD_SALT,           ONLY: LSALT
 USE MODD_SERIES,         ONLY: LSERIES
@@ -756,11 +758,14 @@ CALL SECOND_MNH2(ZTIME1)
 !
 ISYNCHRO = MODULO (KTCOUNT, NDTRATIO(IMI) )      ! test of synchronisation
 !
-
-
-IF (IMI/=1 .AND. NDAD(IMI)/=IMI .AND. (ISYNCHRO==1 .OR. NDTRATIO(IMI) == 1) ) THEN     
-!                                                                        
-  ! Use dummy pointers to correct an ifort BUG
+!
+IF (LCOUPLES.AND.LOCEAN) THEN
+   CALL NHOA_COUPL_n(NDAD(IMI),XTSTEP,IMI,KTCOUNT,IKU)
+END IF
+! No Gridnest in coupled OA LES for now
+IF (.NOT. LCOUPLES .AND. IMI/=1 .AND. NDAD(IMI)/=IMI .AND. (ISYNCHRO==1 .OR. NDTRATIO(IMI) == 1) ) THEN     
+!                                                                         
+! Use dummy pointers to correct an ifort BUG
   DPTR_XBMX1=>XBMX1
   DPTR_XBMX2=>XBMX2
   DPTR_XBMX3=>XBMX3
diff --git a/src/MNH/modn_dynn.f90 b/src/MNH/modn_dynn.f90
index 0f6585f99f5adf5dd4cd7466946cd2b1cd1a2711..43d1f326be9763663dde2b5a225918b87fb757e3 100644
--- a/src/MNH/modn_dynn.f90
+++ b/src/MNH/modn_dynn.f90
@@ -55,6 +55,7 @@
 !!      Modifications 09/06/11  (Barthe)  add LHORELAX_SVELEC in namelist
 !!      Modifications 15/06/11  (Lac)     add LHORELAX for conditional sampling
 !!      Modifications 12/02/12  (Pialat/Tulet) add LHORELAX_SVFF for ForeFire scalar variables
+!!      Modification 03/2021 (JL Redelsperger) add logical LOCEAN for ocean LES version
 !-------------------------------------------------------------------------------
 !
 !*       0.   DECLARATIONS
@@ -62,6 +63,7 @@
 !
 USE MODD_PARAMETERS, ONLY : JPSVMAX
 USE MODD_DYN_n, ONLY : &
+         LOCEAN_n => LOCEAN, &
          XTSTEP_n => XTSTEP, &
          CPRESOPT_n => CPRESOPT, &
          NITR_n => NITR, &
@@ -109,7 +111,8 @@ REAL ,SAVE  :: XTSTEP
 CHARACTER(LEN=5),SAVE  :: CPRESOPT
 INTEGER ,SAVE  :: NITR
 LOGICAL ,SAVE  :: LITRADJ
-LOGICAL ,SAVE  :: LRES 
+LOGICAL ,SAVE  :: LRES
+LOGICAL ,SAVE :: LOCEAN
 REAL ,SAVE     :: XRES
 REAL ,SAVE     :: XRELAX
 LOGICAL, SAVE  :: LHORELAX_UVWTH
@@ -156,12 +159,14 @@ NAMELIST/NAM_DYNn/XTSTEP,CPRESOPT,NITR,LITRADJ,LRES,XRES,XRELAX,LHORELAX_UVWTH,
 #ifdef MNH_FOREFIRE
                   LHORELAX_SVFF, &
 #endif
+                  LOCEAN,&
                   NRIMX,NRIMY,XRIMKMAX,XT4DIFU, &
                   XT4DIFTH,XT4DIFSV
 !
 CONTAINS
 !
 SUBROUTINE INIT_NAM_DYNn
+  LOCEAN = LOCEAN_n
   XTSTEP = XTSTEP_n
   CPRESOPT = CPRESOPT_n
   NITR = NITR_n
@@ -205,6 +210,7 @@ SUBROUTINE INIT_NAM_DYNn
 END SUBROUTINE INIT_NAM_DYNn
 
 SUBROUTINE UPDATE_NAM_DYNn
+  LOCEAN_n = LOCEAN
   XTSTEP_n = XTSTEP
   CPRESOPT_n = CPRESOPT
   NITR_n = NITR
diff --git a/src/MNH/modn_frc.f90 b/src/MNH/modn_frc.f90
index 685ee4f243d5c526fed26540b16b1cabf6259430..50577a0e77e5344617a74c9923a86779f4ad434b 100644
--- a/src/MNH/modn_frc.f90
+++ b/src/MNH/modn_frc.f90
@@ -66,6 +66,11 @@ NAMELIST /NAM_FRC/ LGEOST_UV_FRC      , &
                    LTRANS             , &
                    XUTRANS            , &
                    XVTRANS            , &
-                   LPGROUND_FRC
+                   LPGROUND_FRC       ,&
+                   LDEEPOC ,&
+                   XCENTX_OC ,&
+                   XCENTY_OC ,&
+                   XRADX_OC  ,&
+                   XRADY_OC 
 !
 END MODULE MODN_FRC
diff --git a/src/MNH/modn_nesting.f90 b/src/MNH/modn_nesting.f90
index 90a3f00212fc22a1a5b535a9353b1bb736c5571e..f7c12be2aa19db9db935d420c161d3746d1f0174 100644
--- a/src/MNH/modn_nesting.f90
+++ b/src/MNH/modn_nesting.f90
@@ -43,16 +43,18 @@
 !!
 !!    MODIFICATIONS
 !!    -------------
-!!      Original    16/08/95                      
+!!      Original    16/08/95 
+!!     JL Redelsperger  03/2021 : Add Auto-coupled O-A LES case                      
 !-------------------------------------------------------------------------------
 !
 !*       0.   DECLARATIONS
 !             ------------
 !
 USE MODD_NESTING
+USE MODD_REF, ONLY: LCOUPLES
 !
 IMPLICIT NONE
 !
-NAMELIST/NAM_NESTING/NDAD,NDTRATIO,XWAY
+NAMELIST/NAM_NESTING/NDAD,NDTRATIO,XWAY,LCOUPLES
 !
 END MODULE MODN_NESTING
diff --git a/src/MNH/nhoa_coupln.f90 b/src/MNH/nhoa_coupln.f90
new file mode 100644
index 0000000000000000000000000000000000000000..78810dea127ab5c4a7752bbbfcaf6ebecb719931
--- /dev/null
+++ b/src/MNH/nhoa_coupln.f90
@@ -0,0 +1,155 @@
+!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_NHOA_COUPL_n
+!     ###################
+!
+INTERFACE 
+!
+      SUBROUTINE NHOA_COUPL_n(KDAD,PTSTEP,KMI,KTCOUNT,KKU)
+!
+INTEGER,          INTENT(IN)    :: KDAD     !  Number of the DAD model
+REAL,             INTENT(IN)    :: PTSTEP   !  Time step
+INTEGER,          INTENT(IN)    :: KMI      ! model number
+INTEGER,          INTENT(IN)    :: KKU
+INTEGER,          INTENT(IN)    :: KTCOUNT  !  Temporal loop COUNTer
+                                            ! (=1 at the segment beginning)
+!
+END SUBROUTINE NHOA_COUPL_n
+END INTERFACE
+END MODULE MODI_NHOA_COUPL_n
+!
+!     ####################################################################
+SUBROUTINE NHOA_COUPL_n(KDAD,PTSTEP,KMI,KTCOUNT,KKU)
+!     ####################################################################
+!!
+!!    PURPOSE
+!!    -------
+!   To compute the flux at the O-A interface in the auto-coupling O-A LES case
+!
+!!**  METHOD
+!!    ------
+!!      
+!!    EXTERNAL
+!!    --------
+!!
+!!    IMPLICIT ARGUMENTS
+!!    ------------------
+!!      Module MODD_PARAMETERS: JPHEXT,JPVEXT
+!!      Module MODD_FIELD$n : XUT,XVT,XWT,XRT,XTHT,XPABST
+!!      Module MODD_REF$n   : XRHODJ, XRVREF,XTHVREF, XRHODREF
+!!    REFERENCE
+!!    ---------
+!!
+!!    AUTHOR
+!!    ------
+!!   JL Redelsperger 03/2021   Version 0 
+!!    MODIFICATIONS
+!!    -------------
+!!-----------------------------------------------------------------------------
+!
+!*      0.   DECLARATIONS
+!            ------------
+USE MODE_ll
+USE MODE_MODELN_HANDLER
+!
+USE MODD_PARAMETERS
+USE MODD_NESTING
+USE MODD_CST
+USE MODD_REF_n        ! modules relative to the outer model $n
+USE MODD_FIELD_n
+USE MODD_CONF
+USE MODD_PARAM_n
+USE MODD_TURB_n
+USE MODD_DYN_n, ONLY : LOCEAN
+USE MODD_REF, ONLY: LCOUPLES
+!
+IMPLICIT NONE
+!
+!*       0.1   declarations of arguments
+!
+INTEGER,          INTENT(IN)    :: KDAD     !  Number of the DAD model
+REAL,             INTENT(IN)    :: PTSTEP   !  Time step
+INTEGER,          INTENT(IN)    :: KMI      ! model number
+INTEGER,          INTENT(IN)    :: KKU      ! 
+!
+!
+!*       0.2   declarations of local variables
+!
+INTEGER                :: IIB,IIE,IJB,IJE,IIU,IJU
+INTEGER :: IKE
+INTEGER                :: ILBX,ILBY,ILBX2,ILBY2
+INTEGER,          INTENT(IN)    :: KTCOUNT  !  Temporal loop COUNTer
+                                            ! (=1 at the segment beginning)
+!
+INTEGER           :: JRR,JSV          !  Loop index
+!
+INTEGER :: IINFO_ll, IDIMX, IDIMY
+! surface variables: wind, current, Temp
+REAL, DIMENSION(:,:), ALLOCATABLE :: ZCOUPUA,ZCOUPVA,ZCOUPTA
+REAL, DIMENSION(:,:), ALLOCATABLE :: ZCOUPUO,ZCOUPVO,ZCOUPTO
+!surf flux  local work space
+REAL, DIMENSION(:,:), ALLOCATABLE :: ZCOUPTFL,ZCOUPUFL,ZCOUPVFL
+CHARACTER(LEN=4)                    :: ZINIT_TYPE
+!
+!---Coupled OA MesoNH----------------------------------------------------------------------------
+!*      0.   INITIALISATION
+!            --------------
+! allocate flux local array
+ALLOCATE(ZCOUPTFL(SIZE(XRHODJ,1),SIZE(XRHODJ,2)))
+ALLOCATE(ZCOUPUFL(SIZE(XRHODJ,1),SIZE(XRHODJ,2)))
+ALLOCATE(ZCOUPVFL(SIZE(XRHODJ,1),SIZE(XRHODJ,2)))
+! allocate sfc variable local array
+ALLOCATE(ZCOUPUA(SIZE(XRHODJ,1),SIZE(XRHODJ,2)))
+ALLOCATE(ZCOUPVA(SIZE(XRHODJ,1),SIZE(XRHODJ,2)))
+ALLOCATE(ZCOUPTA(SIZE(XRHODJ,1),SIZE(XRHODJ,2)))
+ALLOCATE(ZCOUPUO(SIZE(XRHODJ,1),SIZE(XRHODJ,2)))
+ALLOCATE(ZCOUPVO(SIZE(XRHODJ,1),SIZE(XRHODJ,2)))
+ALLOCATE(ZCOUPTO(SIZE(XRHODJ,1),SIZE(XRHODJ,2)))
+! values in ocean sfc
+IKE=KKU-JPVEXT
+ZCOUPUO(:,:)= XUT(:,:,IKE)
+ZCOUPVO(:,:)= XVT(:,:,IKE)
+ZCOUPTO(:,:)= XTHT(:,:,IKE)
+!
+! we are going to the atmos model i.e. Model 1
+CALL GOTO_MODEL(KDAD)
+IIB=1
+IIE=IIU
+IJB=1
+IJE=IJU
+!
+! compute gradient between ocean & atmosphere
+ZCOUPUA(:,:)= XUT(:,:,2)-ZCOUPUO(:,:)
+ZCOUPVA(:,:)= XVT(:,:,2)-ZCOUPVO(:,:)
+ZCOUPTA(:,:)= XTHT(:,:,2)-ZCOUPTO(:,:)
+!
+! sfc flux computation  * RHO AIR !!!!
+! flux vu atmosp
+!
+ZCOUPTFL(:,:) = -1.2*1.E-3* SQRT(ZCOUPUA(:,:)**2 +ZCOUPVA(:,:)**2) * ZCOUPTA(:,:)
+ZCOUPUFL(:,:) = -1.2*1.E-3* SQRT(ZCOUPUA(:,:)**2 +ZCOUPVA(:,:)**2) * ZCOUPUA(:,:)
+ZCOUPVFL(:,:) = -1.2*1.E-3* SQRT(ZCOUPUA(:,:)**2 +ZCOUPVA(:,:)**2) * ZCOUPVA(:,:)
+!
+XSSUFL_C(:,:,1)= ZCOUPUFL(:,:)
+XSSVFL_C(:,:,1)= ZCOUPVFL(:,:)
+XSSTFL_C(:,:,1)= ZCOUPTFL(:,:)
+!
+!
+! We are going back in the ocean model  
+! same sign & unit at the top of ocean model and the bottom of atmospheric model
+!  rho_atmos * (w'u')_atmos = rho_ocean * (u'w')_ocean
+!  rho_atmos *Cp_atmos* (u'w')_atmos = rho_ocean * CP_ocean * (u'w')_ocean
+!
+CALL GOTO_MODEL(KMI)
+XSSUFL_C(:,:,1)= ZCOUPUFL(:,:)/XRH00OCEAN
+XSSVFL_C(:,:,1)= ZCOUPVFL(:,:)/XRH00OCEAN
+XSSTFL_C(:,:,1)= ZCOUPTFL(:,:)*1004./(3900.*XRH00OCEAN)
+DEALLOCATE(ZCOUPUA,ZCOUPVA,ZCOUPUO,ZCOUPVO,ZCOUPTA,ZCOUPTO)
+DEALLOCATE(ZCOUPTFL)
+!
+END SUBROUTINE NHOA_COUPL_n
+
diff --git a/src/MNH/one_wayn.f90 b/src/MNH/one_wayn.f90
index dae09f3c1fb37f07aab0a4caaa7996cf63b98b41..07ce225e37fe62abba178b9a61959628efac9a87 100644
--- a/src/MNH/one_wayn.f90
+++ b/src/MNH/one_wayn.f90
@@ -128,6 +128,7 @@ SUBROUTINE ONE_WAY_n(KDAD,PTSTEP,KMI,KTCOUNT,                            &
 USE MODD_CH_MNHC_n,      only: LUSECHAQ, LUSECHIC
 USE MODD_CONF,           only: CEQNSYS
 USE MODD_CST,            only: XCPD, XP00, XRD, XRV, XTH00
+USE MODD_DYN_n,          ONLY : LOCEAN
 USE MODD_FIELD_n,        only: XPABST, XRT, XSVT, XUT, XVT, XWT, XTHT, XTKET
 USE MODD_NESTING,        only: NXOR_ALL, NXEND_ALL, NYOR_ALL, NYEND_ALL
 USE MODD_NSV,            only: NSV_A, NSV_C1R3BEG_A, NSV_C1R3_A, NSV_C2R2BEG_A, NSV_C2R2_A, NSV_CHEMBEG_A, NSV_CHEMEND_A, &
@@ -139,6 +140,7 @@ USE MODD_NSV,            only: NSV_A, NSV_C1R3BEG_A, NSV_C1R3_A, NSV_C2R2BEG_A,
 
 USE MODD_PARAMETERS,     only: JPHEXT, JPVEXT
 USE MODD_PARAM_n,        only: CCLOUD
+USE MODD_REF,            ONLY : LCOUPLES
 USE MODD_REF_n,          only: XRHODJ, XRHODREF, XRVREF, XTHVREF
 !
 use mode_bikhardt
@@ -239,6 +241,21 @@ REAL, DIMENSION(:,:,:,:), ALLOCATABLE :: ZCHEMTI
 !
 integer :: igrid
 !
+IF (LCOUPLES) THEN
+   PDRYMASST=0.
+   PDRYMASSS=0.
+   PLBXUS=0.
+   PLBXVS=0.
+   PLBXWS=0.
+   PLBXTHS=0.
+   PLBYTHS=0.
+   PLBXTKES=0.
+   PLBYTKES =0.
+   PLBXRS =0.
+   PLBYRS=0.
+   PLBXSVS =0.
+   PLBYSVS=0.
+ELSE
 !-------------------------------------------------------------------------------
 !
 !*      0.   INITIALISATION
@@ -790,6 +807,8 @@ DEALLOCATE(ZWORK)
 DEALLOCATE(ZCOEFLIN_LBXM_RED,ZCOEFLIN_LBYM_RED,IKLIN_LBXM_RED,IKLIN_LBYM_RED)
 !
 !------------------------------------------------------------------------------
+ENDIF  ! END LCOUPLES couplage
+!
 CALL GOTO_MODEL(KMI)
 !
 END SUBROUTINE ONE_WAY_n
diff --git a/src/MNH/p_abs.f90 b/src/MNH/p_abs.f90
index 398caa3b9036055871a7e4afbd71f214097f3e95..c89380368cc5d84eb2e496438906c323c576648a 100644
--- a/src/MNH/p_abs.f90
+++ b/src/MNH/p_abs.f90
@@ -16,7 +16,7 @@ INTERFACE
 !
       SUBROUTINE P_ABS (KRR, KRRL, KRRI, PDRYMASST, PREFMASS, PMASS_O_PHI0, &
                         PTHT, PRT, PRHODJ, PRHODREF, PTHETAV, PTHVREF,      &
-                        PRVREF, PEXNREF, PPHIT )
+                        PRVREF, PEXNREF, PPHIT, PPHI0)
 !  
 IMPLICIT NONE
 !
@@ -44,7 +44,7 @@ REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PEXNREF! Exner function of the
 !
 REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PPHIT  ! Perturbation of
                ! either the Exner function Pi or Pi * Cpd * THvref
-!
+REAL,                     INTENT(INOUT) :: PPHI0 !    Phi0 at time t !
 !
 END SUBROUTINE P_ABS
 !
@@ -54,7 +54,7 @@ END MODULE MODI_P_ABS
 !     #######################################################################
       SUBROUTINE P_ABS (KRR, KRRL, KRRI, PDRYMASST, PREFMASS, PMASS_O_PHI0, &
 		                PTHT, PRT, PRHODJ, PRHODREF, PTHETAV, PTHVREF,      &
-                        PRVREF, PEXNREF, PPHIT )
+                        PRVREF, PEXNREF, PPHIT, PPHI0 )
 !     #######################################################################
 !
 !!****  *P_ABS * - routine to compute the absolute Exner pressure deviation PHI
@@ -108,6 +108,8 @@ END MODULE MODI_P_ABS
 !!                              from Durran (1989), MAE and DUR respectively
 !!                  15/06/98  (D.Lugato, R.Guivarch) Parallelisation
 !!      J. Colin       07/13  Add LBOUSS
+!!      J.L Redelsperger 03/2021 Change of one step to pressure computation 
+!!                              in order to perform Ocean runs (equivalent to LHE shallow convection)
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS 
@@ -116,6 +118,7 @@ END MODULE MODI_P_ABS
 USE MODD_CST
 USE MODD_CONF
 USE MODD_PARAMETERS
+USE MODD_DYN_n, ONLY : LOCEAN
 USE MODD_REF, ONLY : LBOUSS
 !
 USE MODE_ll
@@ -151,6 +154,7 @@ REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRVREF ! vapor mixing ratio
 REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PEXNREF! Exner function of the
                                                   ! reference state
 !
+REAL,                     INTENT(INOUT) :: PPHI0  ! PHI0 at t
 REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PPHIT  ! Perturbation of
                ! either the Exner function Pi or Pi * Cpd * THvref
 !
@@ -357,7 +361,7 @@ ELSEIF( CEQNSYS == 'LHE' ) THEN
     ENDWHERE 
   ENDIF
   !
-  !               compute the absolute pressure function 
+  !               compute the absolute pressure function (LHE equation system case)
   !
   !
   !
@@ -379,9 +383,18 @@ ELSEIF( CEQNSYS == 'LHE' ) THEN
   ZMASSGUESS  = SUM_DD_R2_ll(ZMASSGUESS_2D)
   ZWATERMASST =  SUM_DD_R2_ll(ZWATERMASST_2D)
   !
-  ZPHI0 = (PDRYMASST + ZWATERMASST - 2. * PREFMASS + ZMASSGUESS ) / PMASS_O_PHI0
-  PPHIT(:,:,:) = PPHIT(:,:,:) + ZPHI0
-  !
+!
+! case shallow bouss : to get the real pressure fluctuation
+!  Eq 2.40 p15 :  constant not resolved in poisson equation
+IF (.NOT. LOCEAN) THEN
+  PPHI0 = (PDRYMASST + ZWATERMASST - 2. * PREFMASS + ZMASSGUESS ) / PMASS_O_PHI0
+ELSE
+! PPHI0 = 0. => to be possibly modified for ocean LES case
+   PPHI0=0.
+END IF
+!  following computation moved in PRESSURE routine (Eq 2.40 bis p15: Phi_total)
+!   PPHIT(:,:,:) = PPHIT(:,:,:) + ZPHI0
+!
 END IF
 !
 !-------------------------------------------------------------------------------
diff --git a/src/MNH/phys_paramn.f90 b/src/MNH/phys_paramn.f90
index 5b0c9f50b45c371938296c04b5339bb9349bfc65..d99996d8bf042d61000603fc781d942bd9935b3a 100644
--- a/src/MNH/phys_paramn.f90
+++ b/src/MNH/phys_paramn.f90
@@ -236,6 +236,7 @@ END MODULE MODI_PHYS_PARAM_n
 !  P. Wautelet 21/11/2019: ZRG_HOUR and ZRAT_HOUR are now parameter arrays
 !! 11/2019 C.Lac correction in the drag formula and application to building in addition to tree
 !! 02/2021 F.Auguste: add IBM
+!!  03/2021: JL Redelsperger Add the SW flux penetration for Ocean model case
 !!-------------------------------------------------------------------------------
 !
 !*       0.     DECLARATIONS
@@ -283,6 +284,7 @@ USE MODD_METRICS_n
 USE MODD_MNH_SURFEX_n
 USE MODD_NESTING, ONLY : XWAY,NDAD, NDXRATIO_ALL, NDYRATIO_ALL
 USE MODD_NSV
+USE MODD_OCEANH
 USE MODD_OUT_n
 USE MODD_PARAM_C2R2,       ONLY : LSEDC
 USE MODD_PARAMETERS
@@ -298,6 +300,7 @@ USE MODD_PRECIP_n
 use modd_precision,        only: MNHTIME
 USE MODD_RADIATIONS_n
 USE MODD_RAIN_ICE_DESCR,  ONLY : XRTMIN
+USE MODD_REF, ONLY : LCOUPLES
 USE MODD_REF_n
 USE MODD_SALT
 USE MODD_SHADOWS_n
@@ -444,6 +447,11 @@ INTEGER           :: IKIDM          ! index loop
 REAL, DIMENSION(:,:,:),   ALLOCATABLE  :: ZSAVE_INPRR,ZSAVE_INPRS,ZSAVE_INPRG,ZSAVE_INPRH
 REAL, DIMENSION(:,:,:),   ALLOCATABLE  :: ZSAVE_INPRC,ZSAVE_PRCONV,ZSAVE_PRSCONV
 REAL, DIMENSION(:,:,:,:), ALLOCATABLE  :: ZSAVE_DIRFLASWD, ZSAVE_SCAFLASWD,ZSAVE_DIRSRFSWD
+! for ocean model
+INTEGER           :: JKM , JSW         ! vertical index loop                                 
+REAL :: ZSWA,TINTSW     ! index for SW interpolation and int time betwenn forcings (ocean model)
+REAL, DIMENSION(:), ALLOCATABLE :: ZIZOCE(:) ! Solar flux penetrating in ocean
+REAL, DIMENSION(:), ALLOCATABLE :: ZPROSOL1(:),ZPROSOL2(:) ! Funtions for penetrating solar flux
 !
 !-----------------------------------------------------------------------------
 
@@ -806,6 +814,48 @@ IF (CRAD /='NONE') THEN
   if ( lbudget_th ) call Budget_store_end ( tbudgets(NBUDGET_TH), 'RAD', xrths(:, :, :) )
 END IF
 !
+!
+!*        1.6   Ocean case:
+! Sfc turbulent fluxes & Radiative tendency due to SW penetrating ocean
+! 
+IF (LOCEAN .AND. (.NOT.LCOUPLES)) THEN
+!
+ ALLOCATE( ZIZOCE(IKU)); ZIZOCE(:)=0. 
+ ALLOCATE( ZPROSOL1(IKU))
+ ALLOCATE( ZPROSOL2(IKU))
+ ALLOCATE(XSSUFL(IIU,IJU))
+ ALLOCATE(XSSVFL(IIU,IJU))
+ ALLOCATE(XSSTFL(IIU,IJU))
+ ALLOCATE(XSSOLA(IIU,IJU))
+! Time interpolation
+  JSW     = INT(TDTCUR%xtime/REAL(NINFRT))
+  ZSWA    = TDTCUR%xtime/REAL(NINFRT)-REAL(JSW)
+  XSSTFL  = (XSSTFL_T(JSW+1)*(1.-ZSWA)+XSSTFL_T(JSW+2)*ZSWA) 
+  XSSUFL  = (XSSUFL_T(JSW+1)*(1.-ZSWA)+XSSUFL_T(JSW+2)*ZSWA)
+  XSSVFL  = (XSSVFL_T(JSW+1)*(1.-ZSWA)+XSSVFL_T(JSW+2)*ZSWA)
+!
+  ZIZOCE(IKU)   = XSSOLA_T(JSW+1)*(1.-ZSWA)+XSSOLA_T(JSW+2)*ZSWA
+  ZPROSOL1(IKU) = XROC*ZIZOCE(IKU)
+  ZPROSOL2(IKU) = (1.-XROC)*ZIZOCE(IKU)
+ IF(NVERB >= 5 ) THEN   
+  WRITE(ILUOUT,*)'ZSWA JSW TDTCUR XTSTEP FT FU FV SolarR(IKU)', NINFRT, ZSWA,JSW,&
+       TDTCUR%xtime, XTSTEP, XSSTFL(2,2), XSSUFL(2,2),XSSVFL(2,2),ZIZOCE(IKU)
+ END IF
+  DO JKM=IKU-1,2,-1
+   ZPROSOL1(JKM) = ZPROSOL1(JKM+1)* exp(-XDZZ(2,2,JKM)/XD1)
+   ZPROSOL2(JKM) = ZPROSOL2(JKM+1)* exp(-XDZZ(2,2,JKM)/XD2)
+   ZIZOCE(JKM)   = (ZPROSOL1(JKM+1)-ZPROSOL1(JKM) + ZPROSOL2(JKM+1)-ZPROSOL2(JKM))/XDZZ(2,2,JKM)
+! Adding to tep temp tendency, the solar radiation penetrating in ocean
+  if ( lbudget_th ) call Budget_store_init( tbudgets(NBUDGET_TH), 'OCE', xrths(:, :, :) )
+   XRTHS(:,:,JKM) = XRTHS(:,:,JKM) + XRHODJ(:,:,JKM)*ZIZOCE(JKM)
+  if ( lbudget_th ) call Budget_store_end ( tbudgets(NBUDGET_TH), 'OCE', xrths(:, :, :) )
+  END DO
+ DEALLOCATE( ZIZOCE) 
+ DEALLOCATE (ZPROSOL1)
+ DEALLOCATE (ZPROSOL2)
+END IF
+!
+!
 CALL SECOND_MNH2(ZTIME2)
 !
 PRAD = PRAD + ZTIME2 - ZTIME1 &
@@ -1526,7 +1576,14 @@ PMAFL = PMAFL + ZTIME4 - ZTIME3 - ZTIME_LES_MF
 PTIME_BU = PTIME_BU + XTIME_LES_BU_PROCESS + XTIME_BU_PROCESS
 !
 !
+!* deallocate sf flux array for ocean model (in grid nesting, dimensions can vary)
 !
+IF (LOCEAN .AND. (.NOT. LCOUPLES)) THEN
+  DEALLOCATE(XSSUFL)
+  DEALLOCATE(XSSVFL)
+  DEALLOCATE(XSSTFL)
+  DEALLOCATE(XSSOLA)
+END IF
 !-------------------------------------------------------------------------------
 !
 !* deallocation of variables used in more than one parameterization
diff --git a/src/MNH/prandtl.f90 b/src/MNH/prandtl.f90
index dc9e578612d8bac8a73a236086e6af7bc890c9a1..fa9aade6145431a2df5e5d5f8e366481b9c4575a 100644
--- a/src/MNH/prandtl.f90
+++ b/src/MNH/prandtl.f90
@@ -187,6 +187,7 @@ END MODULE MODI_PRANDTL
 !!                                               vertical levels
 !!                     2017-09 J.Escobar, use epsilon XMNH_TINY_12 for R*4 
 !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
+!! JL Redelsperger 03/2021 : adding Ocean case for temperature only 
 !! --------------------------------------------------------------------------
 !       
 !*      0. DECLARATIONS
@@ -195,6 +196,7 @@ END MODULE MODI_PRANDTL
 USE MODD_CST
 USE MODD_CONF
 USE MODD_CTURB
+USE MODD_DYN_n, ONLY : LOCEAN
 use modd_field,          only: tfielddata, TYPEREAL
 USE MODD_IO, ONLY: TFILEDATA
 USE MODD_PARAMETERS
@@ -287,15 +289,22 @@ PEMOIST(:,:,KKA) = 2.*PEMOIST(:,:,IKB) - PEMOIST(:,:,IKB+KKL)
 !
 !          1.3 1D Redelsperger numbers
 !
-PBLL_O_E(:,:,:) = MZM( XG / PTHVREF(:,:,:) * PLM(:,:,:) * PLEPS(:,:,:) / PTKEM(:,:,:) )
-IF (KRR /= 0) THEN                ! moist case
-  PREDTH1(:,:,:)= XCTV*PBLL_O_E(:,:,:) * PETHETA(:,:,:) * &
-                   & GZ_M_W(KKA,KKU,KKL,PTHLM,PDZZ)
-  PREDR1(:,:,:) = XCTV*PBLL_O_E(:,:,:) * PEMOIST(:,:,:) * &
-                   & GZ_M_W(KKA,KKU,KKL,PRM(:,:,:,1),PDZZ)
-ELSE                              ! dry case
+IF (LOCEAN) THEN
+  PBLL_O_E(:,:,:) = MZM(XG *XALPHAOC* PLM(:,:,:) * PLEPS(:,:,:) / PTKEM(:,:,:) )  
   PREDTH1(:,:,:)= XCTV*PBLL_O_E(:,:,:)  * GZ_M_W(KKA,KKU,KKL,PTHLM,PDZZ)
   PREDR1(:,:,:) = 0.
+ELSE
+  PBLL_O_E(:,:,:) = MZM(XG / PTHVREF(:,:,:) * PLM(:,:,:) * PLEPS(:,:,:) / PTKEM(:,:,:) )  
+  IF (KRR /= 0) THEN                ! moist case
+    PREDTH1(:,:,:)= XCTV*PBLL_O_E(:,:,:) * PETHETA(:,:,:) * &
+                     & GZ_M_W(KKA,KKU,KKL,PTHLM,PDZZ)
+    PREDR1(:,:,:) = XCTV*PBLL_O_E(:,:,:) * PEMOIST(:,:,:) * &
+                     & GZ_M_W(KKA,KKU,KKL,PRM(:,:,:,1),PDZZ)
+  ELSE                              ! dry case
+    PREDTH1(:,:,:)= XCTV*PBLL_O_E(:,:,:)  * GZ_M_W(KKA,KKU,KKL,PTHLM,PDZZ)
+    PREDR1(:,:,:) = 0.
+  END IF
+!
 END IF
 !
 !       3. Limits on 1D Redelperger numbers
@@ -335,9 +344,11 @@ PREDR1  (:,:,:) = PREDR1  (:,:,:) * ZW1(:,:,:)
 ZW2=SIGN(1.,PREDTH1(:,:,:))
 PREDTH1(:,:,:)= ZW2(:,:,:) * MAX(XMNH_TINY_12, ZW2(:,:,:)*PREDTH1(:,:,:))
 !
-IF (KRR /= 0) THEN                ! dry case
-  ZW2=SIGN(1.,PREDR1(:,:,:))
-  PREDR1(:,:,:)= ZW2(:,:,:) * MAX(XMNH_TINY_12, ZW2(:,:,:)*PREDR1(:,:,:))
+IF (.NOT.LOCEAN) THEN
+  IF (KRR /= 0) THEN                ! dry case
+    ZW2=SIGN(1.,PREDR1(:,:,:))
+    PREDR1(:,:,:)= ZW2(:,:,:) * MAX(XMNH_TINY_12, ZW2(:,:,:)*PREDR1(:,:,:))
+  END IF
 END IF
 !
 !
@@ -448,57 +459,73 @@ IF(HTURBDIM=='1DIM') THEN
 !
 ELSE  IF (L2D) THEN ! 3D case in a 2D model
 !
-  DO JSV=1,ISV
+  IF (LOCEAN) THEN    
     IF (KRR /= 0) THEN
-      ZW1 = MZM( (XG / PTHVREF * PLM * PLEPS / PTKEM)**2 ) *PETHETA
+      ZW1 = MZM((XG *XALPHAOC * PLM * PLEPS / PTKEM)**2 ) *PETHETA
     ELSE
-      ZW1 = MZM( (XG / PTHVREF * PLM * PLEPS / PTKEM)**2)
-    END IF
-    PRED2THS3(:,:,:,JSV) = PREDTH1(:,:,:) * PREDS1(:,:,:,JSV)   +        &
-                       ZW1*                                              &
-                       MZM(GX_M_M(PSVM(:,:,:,JSV),PDXX,PDZZ,PDZX)*       &
-                           GX_M_M(PTHLM,PDXX,PDZZ,PDZX)                  &
-                          )
-!
-    IF (KRR /= 0) THEN
-      PRED2RS3(:,:,:,JSV) = PREDR1(:,:,:) * PREDS1(:,:,:,JSV)   +        &
-                       ZW1 * PEMOIST *                                   &
-                       MZM(GX_M_M(PSVM(:,:,:,JSV),PDXX,PDZZ,PDZX)*       &
-                           GX_M_M(PRM(:,:,:,1),PDXX,PDZZ,PDZX)           &
-                          )
-    ELSE
-      PRED2RS3(:,:,:,JSV) = 0.
-    END IF
-  ENDDO
+      ZW1 = MZM((XG *XALPHAOC * PLM * PLEPS / PTKEM)**2)
+     END IF
+  ELSE
+    DO JSV=1,ISV
+      IF (KRR /= 0) THEN
+        ZW1 = MZM( (XG / PTHVREF * PLM * PLEPS / PTKEM)**2 ) *PETHETA
+      ELSE
+        ZW1 = MZM( (XG / PTHVREF * PLM * PLEPS / PTKEM)**2)
+      END IF
+      PRED2THS3(:,:,:,JSV) = PREDTH1(:,:,:) * PREDS1(:,:,:,JSV)   +        &
+                         ZW1*                                              &
+                         MZM(GX_M_M(PSVM(:,:,:,JSV),PDXX,PDZZ,PDZX)*       &
+                             GX_M_M(PTHLM,PDXX,PDZZ,PDZX)                  &
+                            )
+!
+      IF (KRR /= 0) THEN
+        PRED2RS3(:,:,:,JSV) = PREDR1(:,:,:) * PREDS1(:,:,:,JSV)   +        &
+                         ZW1 * PEMOIST *                                   &
+                         MZM(GX_M_M(PSVM(:,:,:,JSV),PDXX,PDZZ,PDZX)*       &
+                             GX_M_M(PRM(:,:,:,1),PDXX,PDZZ,PDZX)           &
+                            )
+      ELSE
+        PRED2RS3(:,:,:,JSV) = 0.
+      END IF
+    ENDDO
+  END IF
 !
 ELSE ! 3D case in a 3D model
 !
-  DO JSV=1,ISV
-    IF (KRR /= 0) THEN
-      ZW1 = MZM( (XG / PTHVREF * PLM * PLEPS / PTKEM)**2 ) *PETHETA
-    ELSE
-      ZW1 = MZM( (XG / PTHVREF * PLM * PLEPS / PTKEM)**2)
-    END IF
-    PRED2THS3(:,:,:,JSV) = PREDTH1(:,:,:) * PREDS1(:,:,:,JSV)   +        &
-                       ZW1*                                              &
-                       MZM(GX_M_M(PSVM(:,:,:,JSV),PDXX,PDZZ,PDZX)*       &
-                           GX_M_M(PTHLM,PDXX,PDZZ,PDZX)                  &
-                          +GY_M_M(PSVM(:,:,:,JSV),PDYY,PDZZ,PDZY)*       &
-                           GY_M_M(PTHLM,PDYY,PDZZ,PDZY)                  &
-                          )
-!
-    IF (KRR /= 0) THEN
-      PRED2RS3(:,:,:,JSV) = PREDR1(:,:,:) * PREDS1(:,:,:,JSV)   +        &
-                       ZW1 * PEMOIST *                                   &
-                       MZM(GX_M_M(PSVM(:,:,:,JSV),PDXX,PDZZ,PDZX)*       &
-                           GX_M_M(PRM(:,:,:,1),PDXX,PDZZ,PDZX)           &
-                          +GY_M_M(PSVM(:,:,:,JSV),PDYY,PDZZ,PDZY)*       &
-                           GY_M_M(PRM(:,:,:,1),PDYY,PDZZ,PDZY)           &
-                          )
-    ELSE
-      PRED2RS3(:,:,:,JSV) = 0.
-    END IF
-  ENDDO
+  IF (LOCEAN) THEN    
+  IF (KRR /= 0) THEN
+        ZW1 = MZM((XG *XALPHAOC * PLM * PLEPS / PTKEM)**2 ) *PETHETA
+      ELSE
+        ZW1 = MZM((XG *XALPHAOC * PLM * PLEPS / PTKEM)**2)
+      END IF
+  ELSE   
+    DO JSV=1,ISV
+      IF (KRR /= 0) THEN
+        ZW1 = MZM( (XG / PTHVREF * PLM * PLEPS / PTKEM)**2 ) *PETHETA
+      ELSE
+        ZW1 = MZM( (XG / PTHVREF * PLM * PLEPS / PTKEM)**2)
+      END IF
+      PRED2THS3(:,:,:,JSV) = PREDTH1(:,:,:) * PREDS1(:,:,:,JSV)   +        &
+                         ZW1*                                              &
+                         MZM(GX_M_M(PSVM(:,:,:,JSV),PDXX,PDZZ,PDZX)*       &
+                             GX_M_M(PTHLM,PDXX,PDZZ,PDZX)                  &
+                            +GY_M_M(PSVM(:,:,:,JSV),PDYY,PDZZ,PDZY)*       &
+                             GY_M_M(PTHLM,PDYY,PDZZ,PDZY)                  &
+                            )
+!
+      IF (KRR /= 0) THEN
+        PRED2RS3(:,:,:,JSV) = PREDR1(:,:,:) * PREDS1(:,:,:,JSV)   +        &
+                         ZW1 * PEMOIST *                                   &
+                         MZM(GX_M_M(PSVM(:,:,:,JSV),PDXX,PDZZ,PDZX)*       &
+                             GX_M_M(PRM(:,:,:,1),PDXX,PDZZ,PDZX)           &
+                            +GY_M_M(PSVM(:,:,:,JSV),PDYY,PDZZ,PDZY)*       &
+                             GY_M_M(PRM(:,:,:,1),PDYY,PDZZ,PDZY)           &
+                            )
+      ELSE
+        PRED2RS3(:,:,:,JSV) = 0.
+      END IF
+    ENDDO
+  END IF
 !
 END IF ! end of HTURBDIM if-block
 !
diff --git a/src/MNH/prep_ideal_case.f90 b/src/MNH/prep_ideal_case.f90
index 665d038d648d00b933f4ac38adfcd719c352c5b7..ffae04e797d279e43e196855fdbd4ea54cb72e46 100644
--- a/src/MNH/prep_ideal_case.f90
+++ b/src/MNH/prep_ideal_case.f90
@@ -320,6 +320,7 @@
 !  P. Wautelet 20/05/2019: add name argument to ADDnFIELD_ll + new ADD4DFIELD_ll subroutine
 !  F. Auguste  02/2021   : add IBM
 !  P. Wautelet 09/03/2021: move some chemistry initializations to ini_nsv
+!  Jean-Luc Redelsperger 03/2021 : : ocean LES case
 !-------------------------------------------------------------------------------
 !
 !*       0.   DECLARATIONS
@@ -576,7 +577,7 @@ TYPE(TFILEDATA),POINTER :: TZEXPREFILE  => NULL()
 NAMELIST/NAM_CONF_PRE/ LTHINSHELL,LCARTESIAN,    &! Declarations in MODD_CONF
                        LPACK,                    &!
                        NVERB,CIDEAL,CZS,         &!+global variables initialized
-                       LBOUSS,LPERTURB,          &! at their declarations
+                       LBOUSS,LOCEAN,LPERTURB,   &! at their declarations
                        LFORCING,CEQNSYS,         &! at their declarations
                        LSHIFT,L2D_ADV_FRC,L2D_REL_FRC, &
                        NHALO , JPHEXT
@@ -976,6 +977,11 @@ ALLOCATE(XDZZ(NIU,NJU,NKU))
 !
 ALLOCATE(XRHODREFZ(NKU),XTHVREFZ(NKU))
 XTHVREFZ(:)=0.0
+IF (LCOUPLES) THEN
+  ! Arrays for reference state different in ocean and atmosphere
+  ALLOCATE(XRHODREFZO(NKU),XTHVREFZO(NKU))
+  XTHVREFZO(:)=0.0
+END IF
 IF(CEQNSYS == 'DUR') THEN
   ALLOCATE(XRVREF(NIU,NJU,NKU))
 ELSE
@@ -990,7 +996,11 @@ ALLOCATE(XLSUM(NIU,NJU,NKU))
 ALLOCATE(XLSVM(NIU,NJU,NKU))
 ALLOCATE(XLSWM(NIU,NJU,NKU))
 ALLOCATE(XLSTHM(NIU,NJU,NKU))
-ALLOCATE(XLSRVM(NIU,NJU,NKU))
+IF ( NRR >= 1) THEN
+  ALLOCATE(XLSRVM(NIU,NJU,NKU))
+ELSE
+  ALLOCATE(XLSRVM(0,0,0))
+ENDIF
 !
 !  allocate lateral boundary field used for coupling
 !
@@ -1635,9 +1645,11 @@ IF(LPERTURB) CALL SET_PERTURB(TZEXPREFILE)
 !
 !*       5.9   Anelastic correction and pressure:
 !
-CALL ICE_ADJUST_BIS(XPABST,XTHT,XRT)
-IF ( .NOT. L1D ) CALL PRESSURE_IN_PREP(XDXX,XDYY,XDZX,XDZY,XDZZ)
-CALL ICE_ADJUST_BIS(XPABST,XTHT,XRT)
+IF (.NOT.LOCEAN) THEN
+  CALL ICE_ADJUST_BIS(XPABST,XTHT,XRT)
+  IF ( .NOT. L1D ) CALL PRESSURE_IN_PREP(XDXX,XDYY,XDZX,XDZY,XDZZ)
+  CALL ICE_ADJUST_BIS(XPABST,XTHT,XRT)
+END IF
 !
 !
 !*       5.10  Compute THETA, vapor and cloud mixing ratio
@@ -1654,19 +1666,28 @@ IF (CIDEAL == 'RSOU') THEN
   ALLOCATE(ZRSATW(NIU,NJU,NKU))
   ALLOCATE(ZRSATI(NIU,NJU,NKU))             
   ZRT=XRT(:,:,:,1)+XRT(:,:,:,2)+XRT(:,:,:,4)
+IF (LOCEAN) THEN
+   ZEXN(:,:,:)= 1.  
+   ZT=XTHT
+   ZTHL=XTHT
+   ZCPH=XCPD+ XCPV * XRT(:,:,:,1)
+   ZLVOCPEXN = XLVTT
+   ZLSOCPEXN = XLSTT
+ELSE
   ZEXN=(XPABST/XP00) ** (XRD/XCPD)
   ZT=XTHT*(XPABST/XP00)**(XRD/XCPD)
   ZCPH=XCPD+ XCPV * XRT(:,:,:,1)+ XCL *XRT(:,:,:,2)  + XCI * XRT(:,:,:,4)
   ZLVOCPEXN = (XLVTT + (XCPV-XCL) * (ZT-XTT))/(ZCPH*ZEXN)
   ZLSOCPEXN = (XLSTT + (XCPV-XCI) * (ZT-XTT))/(ZCPH*ZEXN)
   ZTHL=XTHT-ZLVOCPEXN*XRT(:,:,:,2)-ZLSOCPEXN*XRT(:,:,:,4)
+  CALL TH_R_FROM_THL_RT_3D('T',ZFRAC_ICE,XPABST,ZTHL,ZRT,XTHT,XRT(:,:,:,1), &
+                            XRT(:,:,:,2),XRT(:,:,:,4),ZRSATW, ZRSATI)
+END IF
   DEALLOCATE(ZEXN)         
   DEALLOCATE(ZT)       
   DEALLOCATE(ZCPH)        
   DEALLOCATE(ZLVOCPEXN)        
   DEALLOCATE(ZLSOCPEXN)
-  CALL TH_R_FROM_THL_RT_3D('T',ZFRAC_ICE,XPABST,ZTHL,ZRT,XTHT,XRT(:,:,:,1), &
-                            XRT(:,:,:,2),XRT(:,:,:,4),ZRSATW, ZRSATI)
   DEALLOCATE(ZTHL) 
   DEALLOCATE(ZRT)
 ! Coherence test
diff --git a/src/MNH/pressurez.f90 b/src/MNH/pressurez.f90
index 7cf850831db046798050853a1a2420b6bc15e302..23c74074db140ad39a6145cf95b1a7d7657ec246 100644
--- a/src/MNH/pressurez.f90
+++ b/src/MNH/pressurez.f90
@@ -220,6 +220,8 @@ END MODULE MODI_PRESSUREZ
 !  P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg
 !  P. Wautelet 20/05/2019: add name argument to ADDnFIELD_ll + new ADD4DFIELD_ll subroutine
 !  P. Wautelet 28/01/2020: use the new data structures and subroutines for budgets for U
+!!     JL Redelsperger 03/2021 : Shallow convection case added in LHE case: 
+!!                               working for both atmosphere and ocean cases  
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
@@ -229,7 +231,8 @@ USE MODD_ARGSLIST_ll, ONLY: LIST_ll
 use modd_budget,      only: lbudget_u, lbudget_v, lbudget_w, NBUDGET_U, NBUDGET_V, NBUDGET_W, tbudgets
 USE MODD_CST
 USE MODD_CONF
-USE MODD_DYN_n,       ONLY: LRES, XRES
+USE MODD_DYN_n,       ONLY: LRES, XRES,LOCEAN
+USE MODD_FIELD_n,     ONLY: XPHIT
 USE MODD_IBM_PARAM_n, ONLY : XIBM_LS,XIBM_SU,LIBM,NIBM_ITR,XIBM_EPSI
 USE MODD_LUNIT_n,     ONLY: TLUOUT
 USE MODD_MPIF
@@ -359,6 +362,7 @@ REAL, DIMENSION(SIZE(PPABST,1),SIZE(PPABST,2),SIZE(PPABST,3)) :: ZTHETAV, &
                         ! MAE + DUR => Exner function perturbation
                         ! LHE       => Exner function perturbation * CPD * THVREF
 !
+REAL :: ZPHI0
 REAL            :: ZRV_OV_RD !  XRV / XRD
 REAL                  :: ZMAXVAL, ZMAXRES, ZMAX,ZMAX_ll ! for print
 INTEGER, DIMENSION(3) :: IMAXLOC ! purpose
@@ -513,9 +517,15 @@ IF(CEQNSYS=='MAE' .OR. CEQNSYS=='DUR') THEN
   ZPHIT(:,:,:)=(PPABST(:,:,:)/XP00)**(XRD/XCPD)-PEXNREF(:,:,:)
   !
 ELSEIF(CEQNSYS=='LHE') THEN
-  ZPHIT(:,:,:)= ((PPABST(:,:,:)/XP00)**(XRD/XCPD)-PEXNREF(:,:,:))   &
-               * XCPD * PTHVREF(:,:,:)
-  !
+  IF ( .NOT. LOCEAN) THEN
+    ZPHIT(:,:,:)= ((PPABST(:,:,:)/XP00)**(XRD/XCPD)-PEXNREF(:,:,:))   &
+                 * XCPD * PTHVREF(:,:,:)
+  ELSE
+    ! Field at T- DT for LHE anelastic approx
+    ! not used in ocean case (flat LHE)
+    ZPHIT(:,:,:)=0.
+  END IF
+!
 END IF
 !
 IF(CEQNSYS=='LHE'.AND. LFLAT .AND. LCARTESIAN .AND. .NOT. LIBM) THEN
@@ -781,12 +791,23 @@ IF ((ZMAX_ll > 1.E-12) .AND. KTCOUNT >0 ) THEN
 !IF (  KTCOUNT >0 .AND. .NOT.LBOUSS ) THEN
   CALL P_ABS   ( KRR, KRRL, KRRI, PDRYMASST, PREFMASS, PMASS_O_PHI0, &
                  PTHT, PRT, PRHODJ, PRHODREF, ZTHETAV, PTHVREF,      &
-                 PRVREF, PEXNREF,  ZPHIT                             )
+                 PRVREF, PEXNREF, ZPHIT, ZPHI0                       )
 !
   IF(CEQNSYS=='MAE' .OR. CEQNSYS=='DUR') THEN
     PPABST(:,:,:)=XP00*(ZPHIT+PEXNREF)**(XCPD/XRD)
   ELSEIF(CEQNSYS=='LHE') THEN
-    PPABST(:,:,:)=XP00*(ZPHIT/(XCPD*PTHVREF)+PEXNREF)**(XCPD/XRD)
+    IF (.NOT. LOCEAN) THEN
+      ! Deep atmosphere case : computing of PI fluctuation ; ZPHI0 (computed in P_ABS routine) is added 
+      XPHIT(:,:,:) = (ZPHIT+ZPHI0)/(XCPD*PTHVREF)
+      ! Absolute Pressure 
+      PPABST(:,:,:)=XP00*(XPHIT(:,:,:)+PEXNREF)**(XCPD/XRD)
+      ! Computing press fluctuation
+      XPHIT(:,:,:) = PPABST(:,:,:) - XP00*PEXNREF**(XCPD/XRD)
+    ELSE
+!    Shallow atmosphere ou ocean
+     XPHIT(:,:,:) = (ZPHIT+ZPHI0)*PRHODREF
+     PPABST(:,:,:)=XPHIT(:,:,:) + XP00*PEXNREF**(XCPD/XRD)
+    END IF
   ENDIF
 !
   IF( HLBCX(1) == 'CYCL' ) THEN
diff --git a/src/MNH/read_field.f90 b/src/MNH/read_field.f90
index 4236b545058083091d043272a760ee8976c42953..e699bf02adbdbeb963970813fad79a9d30bdde82 100644
--- a/src/MNH/read_field.f90
+++ b/src/MNH/read_field.f90
@@ -9,7 +9,7 @@
 !
 INTERFACE 
 !
-      SUBROUTINE READ_FIELD(TPINIFILE,KIU,KJU,KKU,                           &
+      SUBROUTINE READ_FIELD(KOCMI,TPINIFILE,KIU,KJU,KKU,                           &
             HGETTKET,HGETRVT,HGETRCT,HGETRRT,HGETRIT,HGETCIT,HGETZWS,        &
             HGETRST,HGETRGT,HGETRHT,HGETSVT,HGETSRCT,HGETSIGS,HGETCLDFR,     &
             HGETBL_DEPTH,HGETSBL_DEPTH,HGETPHC,HGETPHR,HUVW_ADV_SCHEME,      &
@@ -38,7 +38,7 @@ USE MODD_TIME ! for type DATE_TIME
 !
 !
 TYPE(TFILEDATA),           INTENT(IN)  :: TPINIFILE    !Initial file
-INTEGER,                   INTENT(IN)  :: KIU, KJU, KKU   
+INTEGER,                   INTENT(IN)  :: KIU, KJU, KKU,KOCMI   
                              ! array sizes in x, y and z  directions
 ! 
 CHARACTER (LEN=*),         INTENT(IN)  :: HGETTKET,                          &
@@ -131,7 +131,7 @@ END INTERFACE
 END MODULE MODI_READ_FIELD
 !
 !     ########################################################################
-      SUBROUTINE READ_FIELD(TPINIFILE,KIU,KJU,KKU,                           &
+      SUBROUTINE READ_FIELD(KOCEMI,TPINIFILE,KIU,KJU,KKU,                           &
             HGETTKET,HGETRVT,HGETRCT,HGETRRT,HGETRIT,HGETCIT,HGETZWS,        &
             HGETRST,HGETRGT,HGETRHT,HGETSVT,HGETSRCT,HGETSIGS,HGETCLDFR,     &
             HGETBL_DEPTH,HGETSBL_DEPTH,HGETPHC,HGETPHR,HUVW_ADV_SCHEME,      &
@@ -253,6 +253,7 @@ END MODULE MODI_READ_FIELD
 !  M. Leriche  10/06/2019: in restart case read all immersion modes for LIMA
 !! F. Auguste  02/2021: add fields necessary for IBM
 !! T. Nagel    02/2021: add fields necessary for turbulence recycling
+!! J.L. Redelsperger 03/2021:  add necessary variables for Ocean LES case
 !!-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
@@ -269,6 +270,7 @@ USE MODD_CONF_n
 USE MODD_CST
 USE MODD_CTURB
 USE MODD_DUST
+USE MODD_DYN_n, ONLY : LOCEAN
 USE MODD_ELEC_DESCR,      ONLY: CELECNAMES
 use modd_field,           only: tfielddata, tfieldlist, TYPEDATE, TYPEREAL,TYPELOG,TYPEINT
 USE MODD_FIELD_n,         only: XZWS_DEFAULT
@@ -282,6 +284,7 @@ USE MODD_LATZ_EDFLX
 USE MODD_LG,              ONLY: CLGNAMES
 USE MODD_LUNIT_N,         ONLY: TLUOUT
 USE MODD_NSV
+USE MODD_OCEANH
 USE MODD_PARAM_C2R2,      ONLY: LSUPSAT
 !
 USE MODD_PARAM_LIMA     , ONLY: NMOD_CCN, LSCAV, LAERO_MASS,                &
@@ -292,6 +295,7 @@ USE MODD_PARAM_n,           ONLY: CSCONV
 USE MODD_PASPOL
 USE MODD_RAIN_C2R2_DESCR, ONLY: C2R2NAMES
 USE MODD_RECYCL_PARAM_n
+USE MODD_REF, ONLY:LCOUPLES
 USE MODD_SALT
 USE MODD_TIME ! for type DATE_TIME
 !
@@ -310,7 +314,7 @@ IMPLICIT NONE
 !
 !
 TYPE(TFILEDATA),           INTENT(IN)  :: TPINIFILE    !Initial file
-INTEGER,                   INTENT(IN)  :: KIU, KJU, KKU   
+INTEGER,                   INTENT(IN)  :: KIU, KJU, KKU,KOCEMI   
                              ! array sizes in x, y and z  directions
 ! 
 CHARACTER (LEN=*),         INTENT(IN)  :: HGETTKET,                          &
@@ -1532,6 +1536,66 @@ END SELECT
 !*       2.4   READ FORCING VARIABLES
 !              ----------------------
 !
+! READ FIELD ONLY FOR MODEL1 (identical for all model in GN)
+IF (LOCEAN .AND. (.NOT.LCOUPLES) .AND. (KOCEMI==1)) THEN
+!
+ CALL IO_Field_read(TPINIFILE,'NFRCLT',NFRCLT)
+ CALL IO_Field_read(TPINIFILE,'NINFRT',NINFRT)
+!
+ TZFIELD%CMNHNAME   = 'SSUFL_T'
+ TZFIELD%CSTDNAME   = ''
+ TZFIELD%CLONGNAME  = 'SSUFL'
+ TZFIELD%CUNITS     = 'kg m-1 s-1'
+ TZFIELD%CDIR       = '--'
+ TZFIELD%CCOMMENT   = 'sfc stress along U to force ocean LES '
+ TZFIELD%NGRID      = 0
+ TZFIELD%NTYPE      = TYPEREAL
+ TZFIELD%NDIMS      = 1
+ TZFIELD%LTIMEDEP   = .FALSE.
+ ALLOCATE(XSSUFL_T(NFRCLT))
+  CALL IO_Field_read(TPINIFILE,TZFIELD,XSSUFL_T(:))
+!
+ TZFIELD%CMNHNAME   = 'SSVFL_T'
+ TZFIELD%CSTDNAME   = ''
+ TZFIELD%CLONGNAME  = 'SSVFL'
+ TZFIELD%CUNITS     = 'kg m-1 s-1'
+ TZFIELD%CDIR       = '--'
+ TZFIELD%CCOMMENT   = 'sfc stress along V to force ocean LES '
+ TZFIELD%NGRID      = 0
+ TZFIELD%NTYPE      = TYPEREAL
+ TZFIELD%NDIMS      = 1
+ TZFIELD%LTIMEDEP   = .FALSE.
+ALLOCATE(XSSVFL_T(NFRCLT))
+  CALL IO_Field_read(TPINIFILE,TZFIELD,XSSVFL_T(:))
+!
+ TZFIELD%CMNHNAME   = 'SSTFL_T'
+ TZFIELD%CSTDNAME   = ''
+ TZFIELD%CLONGNAME  = 'SSTFL'
+ TZFIELD%CUNITS     = 'kg m3 K m s-1'
+ TZFIELD%CDIR       = '--'
+ TZFIELD%CCOMMENT   = 'sfc total heat flux to force ocean LES '
+ TZFIELD%NGRID      = 0
+ TZFIELD%NTYPE      = TYPEREAL
+ TZFIELD%NDIMS      = 1
+ TZFIELD%LTIMEDEP   = .FALSE.
+ ALLOCATE(XSSTFL_T(NFRCLT))
+  CALL IO_Field_read(TPINIFILE,TZFIELD,XSSTFL_T(:))
+! 
+ TZFIELD%CMNHNAME   = 'SSOLA_T'
+ TZFIELD%CSTDNAME   = ''
+ TZFIELD%CLONGNAME  = 'SSOLA'
+ TZFIELD%CUNITS     = 'kg m3 K m s-1'
+ TZFIELD%CDIR       = '--'
+ TZFIELD%CCOMMENT   = 'sfc solar flux at sfc to force ocean LES '
+ TZFIELD%NGRID      = 0
+ TZFIELD%NTYPE      = TYPEREAL
+ TZFIELD%NDIMS      = 1
+ TZFIELD%LTIMEDEP   = .FALSE.
+ ALLOCATE(XSSOLA_T(NFRCLT))
+  CALL IO_Field_read(TPINIFILE,TZFIELD,XSSOLA_T(:))
+!
+END IF ! ocean sfc forcing end    
+
 !
 IF ( LFORCING ) THEN
   DO JT=1,KFRC
@@ -1880,4 +1944,3 @@ END IF
 ! 
 !
 END SUBROUTINE READ_FIELD
-
diff --git a/src/MNH/set_cstn.f90 b/src/MNH/set_cstn.f90
index 986526c82b5fd2812e3c20c9d54300592149a19e..22408fdc282d82461f1f57a711cdca15d1b17dac 100644
--- a/src/MNH/set_cstn.f90
+++ b/src/MNH/set_cstn.f90
@@ -170,6 +170,7 @@ END MODULE MODI_SET_CSTN
 !
 USE MODD_CONF
 USE MODD_CST
+USE MODD_DYN_n, ONLY : LOCEAN
 USE MODD_GRID_n
 USE MODD_IO,         ONLY: TFILEDATA
 USE MODD_LUNIT_n,    ONLY: TLUOUT
@@ -393,8 +394,12 @@ END DO
 !*       4.3    Compute Mixing ratio
 !
 ! determines the pressure under the ground
-ZEXNGRDM= ( ZPGROUND / XP00) ** ZRDSCPD  &
-          - XG/XCPD  / (0.5*(ZTHV(1)+ZTHVM(1))) * (ZZMASS_PROFILE(1) - ZHEIGHT(1))
+IF (LOCEAN) THEN
+  ZEXNGRDM= ( ZPGROUND / XP00) ** ZRDSCPD
+ELSE
+  ZEXNGRDM= ( ZPGROUND / XP00) ** ZRDSCPD  &
+            - XG/XCPD  / (0.5*(ZTHV(1)+ZTHVM(1))) * (ZZMASS_PROFILE(1) - ZHEIGHT(1))
+END IF
 ZPGRDM = XP00 * ZEXNGRDM ** (1./ZRDSCPD)
 ZPM(:)  = PRESS_HEIGHT(ZZMASS_PROFILE(:),ZTHVM,ZPGRDM,ZTHVM(1),ZZMASS_PROFILE(1)) ! compute P
 ZTVM(:) = ZTHVM(:) * (ZPM(:) / XP00) ** ZRDSCPD                ! compute Tv
diff --git a/src/MNH/set_mass.f90 b/src/MNH/set_mass.f90
index a7b266aaa997e476fbc3fa3d32a820b47f56efbe..d38a9ab856a26ed7f9b1de607591743c09ea665a 100644
--- a/src/MNH/set_mass.f90
+++ b/src/MNH/set_mass.f90
@@ -121,6 +121,7 @@ SUBROUTINE SET_MASS(TPFILE,OPROFILE_IN_PROC, PZFLUX_PROFILE,
 !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
 !  P. Wautelet 26/04/2019: replace non-standard FLOAT function by REAL function
 !  P. Wautelet 20/05/2019: add name argument to ADDnFIELD_ll + new ADD4DFIELD_ll subroutine
+!  J-L Redelsperger 06/2021: Ocean case
 !
 !-------------------------------------------------------------------------------
 !!
@@ -135,9 +136,11 @@ USE MODD_CST
 USE MODD_REF
 USE MODD_PARAMETERS
 USE MODD_DIM_n
+USE MODD_DYN_n, ONLY : LOCEAN
 !
 USE MODE_GATHER_ll
 USE MODE_ll
+USE MODE_THERMO
 !
 USE MODI_VER_INT_THERMO ! interface modules
 USE MODI_WATER_SUM
@@ -147,6 +150,8 @@ USE MODI_VER_INT_DYN
 USE MODI_SHUMAN
 USE MODI_COMPUTE_EXNER_FROM_GROUND
 USE MODI_COMPUTE_EXNER_FROM_TOP
+USE MODI_COMPUTE_PRESS_FROM_OCEANSFC
+USE MODI_COMPUTE_PRESS_FROM_OCEANBOT
 USE MODI_SET_GEOSBAL
 USE MODE_REPRO_SUM
 USE MODE_MPPDB
@@ -191,7 +196,10 @@ REAL,DIMENSION(SIZE(XXHAT),SIZE(XYHAT),SIZE(XZHAT))    :: ZPMHP_MX      ! pressu
 REAL,DIMENSION(SIZE(XXHAT),SIZE(XYHAT),SIZE(XZHAT))    :: ZRHOD_MX      ! local rhod (mass level)
 REAL,DIMENSION(SIZE(XZHAT))                            :: ZRHOD_PROFILE ! local rhod (mass level) at initialization profile column
 REAL,DIMENSION(SIZE(XXHAT),SIZE(XYHAT),SIZE(XZHAT))    :: ZPMASS_MX     ! pressure (mass level)
+REAL,DIMENSION(SIZE(XXHAT),SIZE(XYHAT),SIZE(XZHAT))    :: ZPFLUX_MX     ! pressure (mass level)
 REAL,DIMENSION(SIZE(XXHAT),SIZE(XYHAT))                :: ZEXNSURF2D_MX ! local Exner function at ground
+REAL,DIMENSION(SIZE(XXHAT),SIZE(XYHAT))                :: ZPRESS2D_MX   ! local pressure at ground
+REAL,DIMENSION(SIZE(XXHAT),SIZE(XYHAT))                :: ZPRESSFC      !  pressure at ocean sfc (ocen model case)
 REAL,DIMENSION(SIZE(XXHAT),SIZE(XYHAT),SIZE(XZHAT))    :: ZHEXNFLUX_MX  ! local hyd. Exner function at flux points on the mixed grid
 REAL,DIMENSION(SIZE(XXHAT),SIZE(XYHAT),SIZE(XZHAT))    :: ZHEXNMASS_MX  ! local hyd. Exner function at mass points on the mixed grid
 !
@@ -224,6 +232,8 @@ REAL,DIMENSION(SIZE(XXHAT),SIZE(XYHAT),SIZE(XZHAT))    :: ZRHODJU        ! horiz
 REAL,DIMENSION(SIZE(XXHAT),SIZE(XYHAT),SIZE(XZHAT))    :: ZRHODJV        ! the MESONH Arakawa C grid
 REAL,DIMENSION(SIZE(XXHAT),SIZE(XYHAT),SIZE(XZHAT))    :: ZHEXNFLUX      ! local hyd. Exner function at flux points (MNH grid)
 REAL,DIMENSION(SIZE(XXHAT),SIZE(XYHAT),SIZE(XZHAT))    :: ZHEXNMASS      ! local hyd. Exner function at mass points (MNH grid)
+REAL,DIMENSION(SIZE(XXHAT),SIZE(XYHAT),SIZE(XZHAT))    :: ZPMASS         ! local hyd. pres at mass points (MNH grid)
+REAL,DIMENSION(SIZE(XXHAT),SIZE(XYHAT),SIZE(XZHAT))    :: ZPFLUX         ! local hyd. pres at flux points (MNH grid)
 REAL,DIMENSION(SIZE(XXHAT),SIZE(XYHAT),SIZE(XZHAT))    :: ZRHOD          ! dry density on MESO-NH grid
 !
 !!$INTEGER                                                :: IIBP,IIEP,IJBP,IJEP
@@ -279,17 +289,35 @@ ENDIF
 !------------------------------
 !* 2.2 compute exner function on mixed grid
 !
-ZEXNSURF2D_MX(:,:)=(PPGROUND/XP00)**(XRD/XCPD)    
-CALL COMPUTE_EXNER_FROM_GROUND(ZTHV3D_MX,PZFLUX_MX,&
-            ZEXNSURF2D_MX,ZHEXNFLUX_MX,ZHEXNMASS_MX)
-ZEXNTOP2D(:,:)=ZHEXNFLUX_MX(:,:,IKE+1)
-ZPMASS_MX(:,:,:)=XP00*(ZHEXNMASS_MX(:,:,:))**(XCPD/XRD)
-ZRHOD_MX(:,:,:)=ZPMASS_MX(:,:,:)/(ZPMASS_MX(:,:,:)/XP00)**(XRD/XCPD) &
+ZEXNSURF2D_MX(:,:)=(PPGROUND/XP00)**(XRD/XCPD)
+!
+IF (LOCEAN)  THEN
+ ZTHVREF3D(:,:,:) = ZTHV3D_MX(:,:,:)
+ ZRHOD_MX(:,:,:)= XRH00OCEAN*(1.-XALPHAOC*(ZTHV3D_MX(:,:,:)-XTH00OCEAN) &
+                               +XBETAOC *(ZMR3D_MX(:,:,:,1)-XSA00OCEAN))
+ ZPRESS2D_MX(:,:)=PPGROUND
+ CALL COMPUTE_PRESS_FROM_OCEANBOT(ZRHOD_MX,PZFLUX_MX,ZPRESS2D_MX,ZPFLUX_MX,ZPMASS_MX)
+ ZHEXNFLUX_MX(:,:,:)=(ZPFLUX_MX(:,:,:)/XP00)**(XRD/XCPD)
+ ZHEXNMASS_MX(:,:,:)=(ZPMASS_MX(:,:,:)/XP00)**(XRD/XCPD)
+ ZEXNTOP2D(:,:)=ZHEXNFLUX_MX(:,:,IKE+1)
+ELSE   
+ CALL COMPUTE_EXNER_FROM_GROUND(ZTHV3D_MX,PZFLUX_MX,&
+              ZEXNSURF2D_MX,ZHEXNFLUX_MX,ZHEXNMASS_MX)
+ ZEXNTOP2D(:,:)=ZHEXNFLUX_MX(:,:,IKE+1)
+ ZPMASS_MX(:,:,:)=XP00*(ZHEXNMASS_MX(:,:,:))**(XCPD/XRD)
+ENDIF
+!
+IF (LOCEAN) THEN
+ IF (LCOUPLES) THEN
+  XEXNTOPO=SUM_DD_R2_ll(ZHEXNFLUX_MX(IIB:IIE,IJB:IJE,IKE+1))/REAL(NIMAX_ll*NJMAX_ll)
+ ELSE
+  XEXNTOP=SUM_DD_R2_ll(ZHEXNFLUX_MX(IIB:IIE,IJB:IJE,IKE+1))/REAL(NIMAX_ll*NJMAX_ll)
+ END IF
+ELSE
+  ZRHOD_MX(:,:,:)=ZPMASS_MX(:,:,:)/(ZPMASS_MX(:,:,:)/XP00)**(XRD/XCPD) &
                  /(XRD*ZTHV3D_MX(:,:,:)*(1.+WATER_SUM(ZMR3D_MX(:,:,:,:))))
-
-XEXNTOP=SUM_DD_R2_ll(ZHEXNFLUX_MX(IIB:IIE,IJB:IJE,IKE+1))/REAL(NIMAX_ll*NJMAX_ll)
-
-
+  XEXNTOP=SUM_DD_R2_ll(ZHEXNFLUX_MX(IIB:IIE,IJB:IJE,IKE+1))/REAL(NIMAX_ll*NJMAX_ll)
+END IF
 !------------------------------
 !*  2.3 Rotate wind in model axis and take into account variations in x,y
 !      directions on the mixed grid
@@ -445,15 +473,17 @@ DEALLOCATE(ZNFLYZ_TOT,ZNFLYZ_TOT_ll)
 !
 
 IF (PRESENT(PCORIOZ)) THEN
-  CALL SET_GEOSBAL(ZUW3D_FL,ZVW3D_FL,PTHVM,PMRM, &
+!To be modified later for ocean model case
+   CALL SET_GEOSBAL(ZUW3D_FL,ZVW3D_FL,PTHVM,PMRM, &
                     KILOC,KJLOC,OBOUSS,ZTHV3D,PCORIOZ)
   CALL COMPUTE_EXNER_FROM_TOP(ZTHV3D,XZZ,ZEXNTOP2D,ZHEXNFLUX,ZHEXNMASS)
   XPABSM(:,:,:)=XP00*ZHEXNMASS(:,:,:) ** (XCPD/XRD)
 ELSE
-! 
-! Interpolation of theta and r
 !
- IF (SIZE(ZTHV3D_MX,3) > 3) THEN
+!No interpolation for ocean case (no bathimetry)
+! Interpolation of theta and r in atmos case
+!
+   IF (SIZE(ZTHV3D_MX,3) > 3) THEN
   CALL VER_INT_THERMO(TPFILE,OSHIFT,ZTHV3D_MX,ZMR3D_MX,PZS_MX,PZS_MX,PZMASS_MX,&
                       PZFLUX_MX,ZPMHP_MX,ZEXNTOP2D, &
                       ZTHV3D,XRT,ZPMHP,ZDIAG)
@@ -462,7 +492,11 @@ ELSE
    XRT    = ZMR3D_MX
    ZDIAG  = 0.
  END IF
-  XTHT(:,:,:)=ZTHV3D(:,:,:)*(1.+WATER_SUM(XRT(:,:,:,:)))/(1.+XRV/XRD*XRT(:,:,:,1))
+ IF (LOCEAN) THEN
+   XTHT(:,:,:)=ZTHV3D(:,:,:)
+ ELSE
+   XTHT(:,:,:)=ZTHV3D(:,:,:)*(1.+WATER_SUM(XRT(:,:,:,:)))/(1.+XRV/XRD*XRT(:,:,:,1))
+ ENDIF
   ZTHV3D(:,:,1)=ZTHV3D(:,:,2)
   XTHT(:,:,1)=XTHT(:,:,2)
   XRT(:,:,1,:)=XRT(:,:,2,:)
@@ -472,7 +506,6 @@ CALL ADD3DFIELD_ll( TZFIELDS_ll, ZTHV3D,       'SET_MASS::ZTHV3D' )
 CALL ADD3DFIELD_ll( TZFIELDS_ll, XRT(:,:,1,:), 'SET_MASS::XRT(:,:,1,:)' )
 CALL UPDATE_HALO_ll(TZFIELDS_ll,IINFO_ll)
 CALL CLEANLIST_ll(TZFIELDS_ll)
-
 !
   IF (NRR>=3) THEN
     WHERE  (XRT(:,:,:,3)<1.E-20)
@@ -489,17 +522,19 @@ CALL CLEANLIST_ll(TZFIELDS_ll)
   CALL VER_INT_DYN(OSHIFT,ZRHODU_MX,ZRHODV_MX,PZFLUX_MX,PZMASS_MX,PZS_MX,ZRHODUA,ZRHODVA)
   ZRHODJU(:,:,:)=MXM(ZRHODUA(:,:,:)*PJ(:,:,:))
   ZRHODJV(:,:,:)=MYM(ZRHODVA(:,:,:)*PJ(:,:,:))
-  CALL COMPUTE_EXNER_FROM_TOP(ZTHV3D,XZZ,ZEXNTOP2D,ZHEXNFLUX,ZHEXNMASS)
-  XPABST(:,:,:)=ZPMHP(:,:,:) + XP00*ZHEXNMASS(:,:,:) ** (XCPD/XRD)
-  ZRHOD(:,:,:)=XPABST(:,:,:)/(XPABST(:,:,:)/XP00)**(XRD/XCPD) &
-            /(XRD*XTHT(:,:,:)*(1.+XRV/XRD*XRT(:,:,:,1)))
+  IF (.NOT.LOCEAN) THEN
+    CALL COMPUTE_EXNER_FROM_TOP(ZTHV3D,XZZ,ZEXNTOP2D,ZHEXNFLUX,ZHEXNMASS)
+    XPABST(:,:,:)=ZPMHP(:,:,:) + XP00*ZHEXNMASS(:,:,:) ** (XCPD/XRD)
+    ZRHOD(:,:,:)=XPABST(:,:,:)/(XPABST(:,:,:)/XP00)**(XRD/XCPD) /(XRD*XTHT(:,:,:)*(1.+XRV/XRD*XRT(:,:,:,1)))
+   ELSE
+    ZRHOD(:,:,:)=XRH00OCEAN*(1.-XALPHAOC*(XTHT(:,:,:)-XTH00OCEAN)+XBETAOC*(XRT(:,:,:,1)-XSA00OCEAN))
+  END IF
   XUT(:,:,:)=ZRHODJU(:,:,:)/MXM(ZRHOD(:,:,:)*PJ(:,:,:))
   XVT(:,:,:)=ZRHODJV(:,:,:)/MYM(ZRHOD(:,:,:)*PJ(:,:,:))
   XWT(:,:,:)=0
   CALL MPPDB_CHECK3DM("SET_MASS:XVT,ZRHODJV,PJ,ZRHODVA",PRECISION,&
                    &    XVT,ZRHODJV,PJ,ZRHODVA )
   ENDIF
-
 !
 !-------------------------------------------------------------------------------
 !*                   4. COMPUTE ANELASTIC REFERENCE (PV)
@@ -518,17 +553,32 @@ ELSE
   DO JK = 1,IKU
     CALL REDUCESUM_ll(XTHVREFZ(JK), IINFO_ll)
   END DO
-
-  XRHODREFZ(:) = XP00/ (XRD* XTHVREFZ(:))
-  ZTHVREF3D(:,:,:)=XTHVREFZ(2)
-  CALL COMPUTE_EXNER_FROM_GROUND(ZTHVREF3D,PZFLUX_MX,&
-          ZEXNSURF2D_MX,ZHEXNFLUX,ZHEXNMASS)
-
-  XEXNTOP=SUM_DD_R2_ll(ZHEXNFLUX(IIB:IIE,IJB:IJE,IKE+1))/REAL(NIMAX_ll*NJMAX_ll)
-
-  ZEXNTOP2D=ZHEXNFLUX(:,:,IKE+1)
-  CALL COMPUTE_EXNER_FROM_TOP(ZTHVREF3D,XZZ,ZEXNTOP2D,ZHEXNFLUX,ZHEXNMASS)
-  XPABST(:,:,:)=ZPMHP(:,:,:) + XP00*ZHEXNMASS(:,:,:) ** (XCPD/XRD)   
+! 
+ IF (LOCEAN) THEN
+! Ocean case boussinesq
+  IF (LCOUPLES) THEN
+   XRHODREFZO(:) = XRH00OCEAN
+   XTHVREFZ(:)  = ZTHV3D(KILOC,KJLOC,IKU-3)   ! XTHVREFZ is uniform
+   ZTHVREF3D(:,:,:)=XTHVREFZ(IKU-3)
+   ZPRESSFC(:,:)=XP00*XEXNTOPO**(XCPD/XRD)   
+  ELSE
+   XRHODREFZ(:) = XRH00OCEAN
+   ZPRESSFC(:,:)=XP00*XEXNTOP**(XCPD/XRD)   
+! on prend pour le moment la valeur  de la couche mélangée
+  END IF
+ CALL COMPUTE_PRESS_FROM_OCEANSFC(ZRHOD,XZZ,ZPRESSFC,ZPFLUX,ZPMASS)
+ XPABST(:,:,:)= ZPMASS(:,:,:)
+!
+ ELSE
+! ATmos: rho = P/ (R Tv)
+ XRHODREFZ(:) = XP00/ (XRD* XTHVREFZ(:))
+ ZTHVREF3D(:,:,:)=XTHVREFZ(2)
+ XEXNTOP=SUM_DD_R2_ll(ZHEXNFLUX(IIB:IIE,IJB:IJE,IKE+1))/REAL(NIMAX_ll*NJMAX_ll)
+ ZEXNTOP2D=ZHEXNFLUX(:,:,IKE+1)
+ CALL COMPUTE_EXNER_FROM_TOP(ZTHVREF3D,XZZ,ZEXNTOP2D,ZHEXNFLUX,ZHEXNMASS)
+ XPABST(:,:,:)=ZPMHP(:,:,:) + XP00*ZHEXNMASS(:,:,:) ** (XCPD/XRD)
+ENDIF
+ ! end of bouss case  
 ENDIF
 !---------------------------------------------------------------------------------
 END SUBROUTINE SET_MASS     
diff --git a/src/MNH/set_perturb.f90 b/src/MNH/set_perturb.f90
index 1f88a63cfff307d1dd499afd5f73d1d7d1f51d9e..ead3d16e74e5bfb12696e98a17ffebd7e60dfcd6 100644
--- a/src/MNH/set_perturb.f90
+++ b/src/MNH/set_perturb.f90
@@ -98,7 +98,8 @@ END MODULE MODI_SET_PERTURB
 !!      C.Lac, V.Masson       1/2018 : White noise in the LBC
 !!      Q.Rodier              10/2018 : move allocate(ZWHITE) for NKWH>2
 !  P. Wautelet 26/04/2019: replace non-standard FLOAT function by REAL function
-!
+!!     J.L Redelsperger   03/2021  : : white noise in Ocean LES case at the top of domain(Sfc)
+!!
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
@@ -106,6 +107,7 @@ END MODULE MODI_SET_PERTURB
 !
 USE MODD_CST
 USE MODD_CONF
+USE MODD_DYN_n, ONLY : LOCEAN
 USE MODD_DIM_n
 USE MODD_FIELD_n
 USE MODD_GRID_n
@@ -115,6 +117,7 @@ USE MODD_LUNIT_n, ONLY: TLUOUT
 USE MODD_LSFIELD_n
 USE MODD_PARAMETERS
 USE MODD_REF_n
+USE MODD_REF
 USE MODD_VAR_ll , ONLY : NMNH_COMM_WORLD
 !
 USE MODE_GATHER_ll
@@ -196,6 +199,7 @@ INTEGER, DIMENSION(:), ALLOCATABLE :: i_seed
 INTEGER                            :: ni_seed
 !
 INTEGER                            :: IXOR,IYOR,JI_ll,JJ_ll
+INTEGER          :: INOISB,INOISE ! Loop indice for White noise
 !
 NAMELIST/NAM_PERT_PRE/CPERT_KIND,XAMPLITH,       &! Perturbation parameters
                       XAMPLIRV,XCENTERZ,XRADX,   &!
@@ -249,6 +253,13 @@ IJE_ll=IJU_ll-JPHEXT
 !
 CALL GET_OR_ll('B',IXOR,IYOR)
 !
+IF (LOCEAN) THEN
+  INOISB=NKWH
+  INOISE=IKE
+ELSE
+  INOISB=2
+  INOISE=NKWH
+ENDIF
 !-------------------------------------------------------------------------------
 !
 !*	 2.     COMPUTE THE PERTURBATION ON THETA : 
@@ -375,8 +386,7 @@ SELECT CASE(CPERT_KIND)
                    ! J.Escobar optim => need only identical random on all domain 
 !
  ALLOCATE(ZWHITE(IIU,IJU))
-!
- DO JK = IKB, NKWH
+  DO JK = INOISB,INOISE
      IKX = (NIMAX_ll+1)/2
      ZX  = 2*XPI/NIMAX_ll
      ALLOCATE(ZCX_ll(IIU_ll,IKX))
diff --git a/src/MNH/set_ref.f90 b/src/MNH/set_ref.f90
index 925fd52efdf6c0189af56d44e594453beaf3bd85..5e355a10e401920849c8a6a738f82a8ff39a431e 100644
--- a/src/MNH/set_ref.f90
+++ b/src/MNH/set_ref.f90
@@ -150,6 +150,7 @@ END MODULE MODI_SET_REF
 !!                                PRHODREF, PEXNREF, PTHVREF after computation
 !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
 !  P. Wautelet 20/05/2019: add name argument to ADDnFIELD_ll + new ADD4DFIELD_ll subroutine
+!! Jean-Luc Redelsperger 03/2021 : OCEAN LES case
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
@@ -160,9 +161,11 @@ USE MODD_IO,      ONLY: TFILEDATA
 USE MODD_LUNIT_n, ONLY: TLUOUT
 USE MODD_PARAMETERS
 USE MODD_REF
+USE MODD_DYN_n, ONLY : LOCEAN
 !
 USE MODE_IO_FIELD_READ, only: IO_Field_read
 USE MODE_ll
+USE MODE_THERMO
 USE MODE_MPPDB
 USE MODE_REPRO_SUM
 !
@@ -210,6 +213,7 @@ REAL, DIMENSION(SIZE(PZZ,1),SIZE(PZZ,2),SIZE(PZZ,3)) :: ZRHOREF
                                                  ! Reference density
 REAL, DIMENSION(SIZE(PZZ,3))    :: ZZHATM        ! height of the mass levels
                ! in the transformed space (GCS transf.) or without orography 
+REAL, DIMENSION(SIZE(PZZ,1),SIZE(PZZ,2),SIZE(PZZ,3)) :: ZDENSOC,ZPFLUX,ZPMASS
 !
 INTEGER             :: IIU        ! Upper dimension in x direction
 INTEGER             :: IJU        ! Upper dimension in y direction
@@ -263,7 +267,12 @@ IF (KMI == 1) THEN
   LNEUTRAL=.FALSE.
   IF (MAXVAL(XTHVREFZ(IKB:IKE))-MINVAL(XTHVREFZ(IKB:IKE)) < 1.E-10) LNEUTRAL=.TRUE.
 END IF
-!
+!*     Ref state diff for O & A in LES coupled mode
+IF (LCOUPLES .AND. LOCEAN) THEN
+  CALL IO_Field_read(TPINIFILE,'RHOREFZ',XRHODREFZO)
+  CALL IO_Field_read(TPINIFILE,'THVREFZ',XTHVREFZO)
+  CALL IO_Field_read(TPINIFILE,'EXNTOP', XEXNTOPO)
+END IF
 !-------------------------------------------------------------------------------
 !
 !*       3.    SET REFERENCE STATE WITH OROGRAPHY 
@@ -285,7 +294,13 @@ CALL MPPDB_CHECK3D(ZZM,"SET_REF::ZZM",PRECISION)
 !
 !*       3.2    Interpolation 
 !  
-DO JI = 1,SIZE(PZZ,1)
+IF (LCOUPLES .AND. LOCEAN) THEN
+   DO JK = 1,IKU
+     PTHVREF(:,:,JK) = XTHVREFZO(JK)
+     PRHODREF(:,:,JK)= XRHODREFZO(JK)
+   END DO
+ELSE   
+ DO JI = 1,SIZE(PZZ,1)
   DO JJ = 1,SIZE(PZZ,2)
 !
     DO JK = 1,IKU
@@ -316,22 +331,21 @@ DO JI = 1,SIZE(PZZ,1)
       END IF
     END DO
   END DO
-END DO
+ END DO
+END IF
 !
 !   change the extrapolation option for the thvref field to be consistent with
 !   the extrapolation option for the flottability at the ground and for rhodref
 !   to be consistent with the extrapolation to compute a divergence 
 PTHVREF(:,:,IKB-1) = PTHVREF(:,:,IKB)
 PRHODREF(:,:,IKB-1) = PRHODREF(:,:,IKB)
-
 CALL MPPDB_CHECK3D(PTHVREF,"SET_REF::PTHVREF",PRECISION)
 CALL MPPDB_CHECK3D(PRHODREF,"SET_REF::PRHODREF",PRECISION)
 !
 !-------------------------------------------------------------------------------
 !
-!*       4.    COMPUTE EXNER FUNCTION
-!              ----------------------
-!
+!*       4.    COMPUTE EXNER FUNCTION AT MASS GRID POINT
+!              ----------------------------------------
 IF (LCARTESIAN .OR. LTHINSHELL) THEN
   ZD1=0.
 ELSE
@@ -340,24 +354,56 @@ ENDIF
 !
 ZGSCPD = XG/XCPD
 !
-PEXNREF(:,:,IKE)=(XEXNTOP*(1.+ZD1*2./7.*(PZZ(:,:,IKE+1)-ZZM(:,:,IKE))/  &
-                                (XRADIUS+(PZZ(:,:,IKE+1)+ZZM(:,:,IKE))/2.))  &
-  + ZGSCPD/PTHVREF(:,:,IKE)*(PZZ(:,:,IKE+1)-ZZM(:,:,IKE)))/ &
-(1.-ZD1*2./7.*(PZZ(:,:,IKE+1)-ZZM(:,:,IKE))/(XRADIUS+(PZZ(:,:,IKE+1)+ZZM(:,:,IKE))/2.))
+IF (LOCEAN) THEN
+!--------------------------------
+! Pressure at domain top (Flux point !!!) saved in Press_mass above the ocen sfc
+ IF (LCOUPLES) THEN
+  ZPMASS(:,:,IKE+1)= XP00 *XEXNTOPO**(XCPD/XRD)
+ ELSE
+  ZPMASS(:,:,IKE+1)= XP00 *XEXNTOP**(XCPD/XRD)
+ ENDIF
+  ZPMASS(:,:,IKE)  = ZPMASS(:,:,IKE+1) +XG*PRHODREF(:,:,IKE)*(PZZ(:,:,IKE+1)-ZZM(:,:,IKE))       
+ DO JK = IKE-1,1,-1
+  ZPMASS(:,:,JK)   = ZPMASS(:,:,JK+1) + XG  * &
+         .5*(PRHODREF(:,:,JK)+ PRHODREF(:,:,JK+1)) * (ZZM(:,:,JK+1) -ZZM(:,:,JK))
+ END DO
+!  
+ IF (LCOUPLES) THEN
+  DO JK = IKE+1, IKU
+! Pressure above domain top (i.e. ocean sfc), i.e. in atmosphere (should be not used)
+    ZPMASS(:,:,JK)   =  XP00 *XEXNTOPO**(XCPD/XRD)
+  END DO
+ ELSE
+  DO JK = IKE+1, IKU
+! Pressure above domain top (i.e. ocean sfc), i.e. in atmosphere (should be not used)
+    ZPMASS(:,:,JK)   =  XP00 *XEXNTOP**(XCPD/XRD)
+  END DO
+ ENDIF
+ PEXNREF(:,:,:)= (ZPMASS(:,:,:)/XP00)**(XRD/XCPD)
+ ! OCEAN end
+ELSE
+ ! ATMOSPHERE
+  PEXNREF(:,:,IKE)=(XEXNTOP*(1.+ZD1*2./7.*(PZZ(:,:,IKE+1)-ZZM(:,:,IKE))/  &
+                                 (XRADIUS+(PZZ(:,:,IKE+1)+ZZM(:,:,IKE))/2.))  &
+   + ZGSCPD/PTHVREF(:,:,IKE)*(PZZ(:,:,IKE+1)-ZZM(:,:,IKE)))/ &
+ (1.-ZD1*2./7.*(PZZ(:,:,IKE+1)-ZZM(:,:,IKE))/(XRADIUS+(PZZ(:,:,IKE+1)+ZZM(:,:,IKE))/2.))
+!
+ DO JK = IKE-1, 1, -1
+   PEXNREF(:,:,JK)=(PEXNREF(:,:,JK+1)*(1.+ZD1*2./7.*(ZZM(:,:,JK+1) -ZZM(:,:,JK))/ &
+                                            (XRADIUS+PZZ(:,:,JK+1)))+ &
+   2.*ZGSCPD/(PTHVREF(:,:,JK+1)+PTHVREF(:,:,JK))*(ZZM(:,:,JK+1) -ZZM(:,:,JK)))/&
+   (1.-ZD1*2./7.*(ZZM(:,:,JK+1) -ZZM(:,:,JK))/(XRADIUS+PZZ(:,:,JK+1)))
+ END DO
+!
+ DO JK = IKE+1, IKU
+  PEXNREF(:,:,JK)=(PEXNREF(:,:,JK-1)*(1.+ZD1*2./7.*(ZZM(:,:,JK-1) -ZZM(:,:,JK))/  &
+                                            (XRADIUS+PZZ(:,:,JK)))+ &
+   2.*ZGSCPD/(PTHVREF(:,:,JK-1)+PTHVREF(:,:,JK))*(ZZM(:,:,JK-1) -ZZM(:,:,JK)))/&
+   (1.-ZD1*2./7.*(ZZM(:,:,JK-1) -ZZM(:,:,JK))/ (XRADIUS+PZZ(:,:,JK)))
+ END DO
 !
-DO JK = IKE-1, 1, -1
-  PEXNREF(:,:,JK)=(PEXNREF(:,:,JK+1)*(1.+ZD1*2./7.*(ZZM(:,:,JK+1) -ZZM(:,:,JK))/ &
-                                           (XRADIUS+PZZ(:,:,JK+1)))+ &
-  2.*ZGSCPD/(PTHVREF(:,:,JK+1)+PTHVREF(:,:,JK))*(ZZM(:,:,JK+1) -ZZM(:,:,JK)))/&
-  (1.-ZD1*2./7.*(ZZM(:,:,JK+1) -ZZM(:,:,JK))/(XRADIUS+PZZ(:,:,JK+1)))
-END DO
+END IF
 !
-DO JK = IKE+1, IKU
-  PEXNREF(:,:,JK)=(PEXNREF(:,:,JK-1)*(1.+ZD1*2./7.*(ZZM(:,:,JK-1) -ZZM(:,:,JK))/  &
-                                           (XRADIUS+PZZ(:,:,JK)))+ &
-  2.*ZGSCPD/(PTHVREF(:,:,JK-1)+PTHVREF(:,:,JK))*(ZZM(:,:,JK-1) -ZZM(:,:,JK)))/&
-  (1.-ZD1*2./7.*(ZZM(:,:,JK-1) -ZZM(:,:,JK))/ (XRADIUS+PZZ(:,:,JK)))
-END DO
 !
 CALL MPPDB_CHECK3D(PEXNREF,"SET_REF::PEXNREF",PRECISION)
 !-------------------------------------------------------------------------------
@@ -372,8 +418,8 @@ IF (LBOUSS) THEN
 ELSE
   ZRHOREF(:,:,:) = PEXNREF(:,:,:) ** ZCVD_O_RD * XP00 / ( XRD * PTHVREF(:,:,:) )
   ZRHOREF(:,:,1)=ZRHOREF(:,:,2)  ! this avoids to obtain erroneous values for
+                                  ! rv at this last point
 END IF
-                               ! rv at this last point
 !
 IF ( CEQNSYS == 'DUR' ) THEN
   IF ( SIZE(PRVREF,1) == 0 ) THEN
@@ -402,13 +448,10 @@ CALL CLEANLIST_ll(TZFIELDS_ll)
 CALL MPPDB_CHECK3D(ZRHOREF,"SET_REF::ZRHOREF",PRECISION)
 IF ( SIZE(PRVREF,1) /= 0 ) CALL MPPDB_CHECK3D(PRVREF,"SET_REF::PRVREF",PRECISION)
 CALL MPPDB_CHECK3D(PRHODJ,"SET_REF::PRHODJ",PRECISION)
-
-
 !
 !*       6.     COMPUTES THE TOTAL MASS OF REFERENCE ATMOSPHERE   
 !	        -----------------------------------------------
 !
-IF (CEQNSYS == "LHE" ) THEN
   ZCVD_O_RDCPD = ZCVD_O_RD / XCPD
   !
   ALLOCATE(ZREFMASS_2D(IIB:IIE,IJB:IJE))
@@ -432,7 +475,6 @@ IF (CEQNSYS == "LHE" ) THEN
   PMASS_O_PHI0 =  SUM_DD_R2_ll(ZMASS_O_PHI0_2D)
 !JUAN16
 !
-END IF
 !
 !
 !-------------------------------------------------------------------------------
@@ -480,7 +522,7 @@ IF ( HLBCY(1)=='OPEN' ) THEN
       ENDDO
    ENDIF
    PLINMASS = PLINMASS +  SUM_DD_R2_ll(ZLINMASS_S_2D)
-!
+   !
    ALLOCATE( ZLINMASS_N_2D(IIB:IIE,IJE+1:IJE+1))  
    ZLINMASS_N_2D = 0.0
    IF (LNORTH_ll(HSPLITTING='B')) THEN
diff --git a/src/MNH/set_rsou.f90 b/src/MNH/set_rsou.f90
index 353c6298bd02baa8db936c4df60565fc4235c013..8f42147d1318ebc51d7182ac1a486b19f5bac80d 100644
--- a/src/MNH/set_rsou.f90
+++ b/src/MNH/set_rsou.f90
@@ -102,7 +102,17 @@ END MODULE MODI_SET_RSOU
 !                                         (Pressure, U, V) , 
 !                                         (Pressure, T, Hu)
 !
-!
+!  For ocean-LES case  the following kind of data is permitted
+!         
+!                  YKIND = 'IDEALOCE' : ZGROUND (Water depth),PGROUND(Sfc Atmos Press),
+!                                        TGROUND (SST), RGROUND (SSS)
+!                                         (Depth , U, V) starting from sfc   
+!                                         (Depth,  T, S)
+!                                     (Time, LE, H, SW_d,SW_u,LW_d,LW_u,Stress_X,Stress_Y)
+!
+!                  YKIND = 'STANDOCE' :  (Depth , Temp, Salinity, U, V) starting from sfc   
+!                                        (Time, LE, H, SW_d,SW_u,LW_d,LW_u,Stress_X,Stress_Y)     
+!        
 !!**  METHOD
 !!    ------
 !!      The radiosounding is first read, then data are converted in order to
@@ -242,6 +252,7 @@ END MODULE MODI_SET_RSOU
 !!      J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 
 !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
 !  P. Wautelet 19/04/2019: removed unused dummy arguments and variables
+!!  JL Redelsperger  : 01/2021: Ocean LES cases added        
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
@@ -250,11 +261,16 @@ END MODULE MODI_SET_RSOU
 USE MODD_CONF
 USE MODD_CONF_n
 USE MODD_CST
+USE MODD_DYN_n, ONLY : LOCEAN
 USE MODD_FIELD_n
 USE MODD_GRID
 USE MODD_GRID_n
+USE MODD_LUNIT_n, ONLY: TLUOUT
 USE MODD_IO,         ONLY: TFILEDATA
+USE MODD_NETCDF
+USE MODD_OCEANH
 USE MODD_PARAMETERS, ONLY: JPHEXT
+USE MODD_TYPE_DATE
 !
 USE MODE_ll
 USE MODE_MSG
@@ -269,6 +285,8 @@ USE MODI_THETAVPU_THETAVPM
 USE MODI_TH_R_FROM_THL_RT_1D
 USE MODI_VERT_COORD
 !
+USE NETCDF          ! for reading the NR files 
+!
 IMPLICIT NONE
 !  
 !  
@@ -291,10 +309,15 @@ REAL, DIMENSION(:,:,:), INTENT(IN) :: PJ ! jacobien
 !
 !*       0.2   Declarations of local variables :
 !
-INTEGER                         :: ILUPRE ! logical unit number
-!
-!  variables read in EXPRE file at the RS levels
-!
+INTEGER                         :: ILUPRE ! logical unit number of the EXPRE return code
+INTEGER                         :: ILUOUT    ! Logical unit number for output-listing
+! local variables for reading sea sfc flux forcing for ocean model
+INTEGER                   :: IFRCLT 
+REAL, DIMENSION(:), ALLOCATABLE :: ZSSUFL_T,ZSSVFL_T,ZSSTFL_T,ZSSOLA_T !
+TYPE (DATE_TIME), DIMENSION(:), ALLOCATABLE :: ZFRCLT ! date/time of sea surface forcings
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+!  variables read in EXPRE file at the RS/CTD levels
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 CHARACTER(LEN=8)                :: YKIND     ! Kind of  variables in 
                                              ! EXPRE FILE
 INTEGER                         :: ILEVELU   ! number of wind levels 
@@ -332,7 +355,7 @@ REAL, DIMENSION(:), ALLOCATABLE :: ZLSOCPEXN
 REAL, DIMENSION(SIZE(XZHAT))    :: ZZFLUX_PROFILE ! altitude of flux points on the initialization columns
 REAL, DIMENSION(SIZE(XZHAT))    :: ZZMASS_PROFILE ! altitude of mass points on the initialization columns
 !
-!  fieds on the grid of the model without orography
+!  fields on the grid of the model without orography
 !
 REAL, DIMENSION(SIZE(XZHAT))    :: ZUW,ZVW ! Wind at w model grid levels
 REAL, DIMENSION(SIZE(XZHAT))    :: ZMRM   ! vapor mixing ratio at mass model
@@ -341,29 +364,42 @@ REAL, DIMENSION(SIZE(XZHAT))    :: ZMRCM,ZMRIM
 REAL, DIMENSION(SIZE(XZHAT))    :: ZTHVM  ! Temperature at mass model grid levels
 REAL, DIMENSION(SIZE(XZHAT))    :: ZTHLM  ! Thetal at mass model grid levels
 REAL, DIMENSION(SIZE(XZHAT))    :: ZTHM  ! Thetal at mass model grid levels
+REAL, DIMENSION(SIZE(XZHAT))    :: ZRHODM   ! density at mass model grid level
 REAL, DIMENSION(:), ALLOCATABLE :: ZMRT    ! Total Vapor mixing ratio at mass levels on mixed grid
 REAL, DIMENSION(:), ALLOCATABLE :: ZEXNMASS  ! exner fonction at mass level
 REAL, DIMENSION(:), ALLOCATABLE :: ZEXNFLUX  ! exner fonction at flux level
 REAL                            :: ZEXNSURF  ! exner fonction at surface
+REAL, DIMENSION(:), ALLOCATABLE :: ZPREFLUX   ! pressure at flux model grid level
 REAL, DIMENSION(:), ALLOCATABLE :: ZFRAC_ICE ! ice fraction
 REAL, DIMENSION(:), ALLOCATABLE :: ZRSATW, ZRSATI             
 REAL                            :: ZDZSDH,ZDZ1SDH,ZDZ2SDH ! interpolation
                                                           ! working arrays
 !
-INTEGER         :: JK,JKLEV, JKU,JKM  ! Loop indexes
+INTEGER         :: JK,JKLEV,JKU,JKM,JKT,JJ,JI,JO,JLOOP  ! Loop indexes
 INTEGER         :: IKU                ! Upper bound in z direction
 REAL            :: ZRDSCPD,ZRADSDG, & ! Rd/Cpd, Pi/180.,
-                   ZRVSRD,ZRDSRV      ! Rv/Rd, Rd/Rv
+                   ZRVSRD,ZRDSRV,   & ! Rv/Rd, Rd/Rv
+                   ZPTOP              ! Pressure at domain top 
 LOGICAL         :: GUSERC             ! use of input data cloud
-INTEGER         :: IIB, IIE, IJB, IJE
+INTEGER         :: IIB, IIE, IJB, IJE,IKB,IKE
 INTEGER         :: IXOR_ll, IYOR_ll
 INTEGER         :: IINFO_ll
 LOGICAL         :: GPROFILE_IN_PROC   ! T : initialization profile is in current processor
+CHARACTER(LEN=100) :: YMSG
 !
 REAL,DIMENSION(SIZE(XXHAT),SIZE(XYHAT))   ::ZZS_LS
 REAL,DIMENSION(SIZE(XXHAT),SIZE(XYHAT),SIZE(XZHAT)) ::ZZFLUX_MX,ZZMASS_MX ! mixed grid
-INTEGER :: JLOOP
 !-------------------------------------------------------------------------------
+! For standard ocean version, reading external files
+CHARACTER(LEN=256) :: infile,infisf ! files to be read
+INTEGER :: NZ,NLATI,NLONGI,IDX,ITIME,ncid,varid,ndimp,ntcindy
+REAL, DIMENSION(:,:,:),     ALLOCATABLE :: ZOC_TEMPERATURE,ZOC_SALINITY,ZOC_U,ZOC_V
+REAL, DIMENSION(:),     ALLOCATABLE :: ZOC_DEPTH  
+REAL, DIMENSION(:),     ALLOCATABLE :: ZOC_LE,ZOC_H
+REAL, DIMENSION(:),     ALLOCATABLE :: ZOC_SW_DOWN,ZOC_SW_UP,ZOC_LW_DOWN,ZOC_LW_UP
+REAL, DIMENSION(:),     ALLOCATABLE :: ZOC_TAUX,ZOC_TAUY
+
+!--------------------------------------------------------------------------------
 !
 !*	 1.     PROLOGUE : INITIALIZE SOME CONSTANTS, RETRIEVE LOGICAL
 !               UNIT NUMBERS AND READ KIND OF DATA IN EXPRE FILE
@@ -380,31 +416,21 @@ ZRVSRD  = XRV/XRD
 ZRDSRV = XRD/XRV
 !
 !*       1.2  Retrieve logical unit numbers 
-!
-!                           
+!                         
 ILUPRE = TPEXPREFILE%NLU
+ILUOUT = TLUOUT%NLU
 !
 !*       1.3  Read data kind in EXPRE file 
 !
 READ(ILUPRE,*) YKIND
-!
+WRITE(ILUOUT,*) 'YKIND read in set_rsou: ', YKIND
 !
 IF(LUSERC .AND. YKIND/='PUVTHDMR' .AND. YKIND/='ZUVTHDMR' .AND.  YKIND/='ZUVTHLMR') THEN 
   CALL PRINT_MSG(NVERB_FATAL,'GEN','SET_RSOU','hydrometeors are not allowed for YKIND = '//trim(YKIND))
 ENDIF
-! Demande Thierry Bergot Sept 2012 
-!IF(LUSERC .AND.(YKIND == 'PUVTHDMR' .OR. YKIND == 'ZUVTHDMR').AND. .NOT. L1D) THEN
-! !callabortstop
-!  CALL PRINT_MSG(NVERB_FATAL,'GEN','SET_RSOU','use of hydrometeors for YKIND=P(Z)UVTHDMR is only allowed in 1D case')
-!ENDIF
-!
-!IF(LUSERI .AND. YKIND=='ZUVTHLMR') THEN
-! !callabortstop
-!  CALL PRINT_MSG(NVERB_FATAL,'GEN','SET_RSOU','use of ice for  YKIND=ZUVTHLMR is not allowed')
-!ENDIF
 !
 IF(YKIND=='ZUVTHLMR' .AND. .NOT. LUSERC) THEN
- !callabortstop
+!callabortstop
   CALL PRINT_MSG(NVERB_FATAL,'GEN','SET_RSOU','LUSERC=T is required for YKIND=ZUVTHLMR')
 ENDIF
 !
@@ -416,8 +442,345 @@ IF(LUSERC .AND. (YKIND == 'PUVTHDMR' .OR. YKIND == 'ZUVTHDMR')) GUSERC=.TRUE.
 !	        --------------------------------------------------------
 !
 SELECT CASE(YKIND)
+!   
+!     2.0.1 Ocean case 1
+!   
+  CASE ('IDEALOCE')
+!
+    ! Read data in PRE_IDEA1.nam
+    ! Surface      
+    WRITE(ILUOUT,FMT=*) 'Reading data for ideal ocean :IDEALOCE'   
+    READ(ILUPRE,*) ZPTOP           ! P_atmosphere at sfc =P top domain
+    READ(ILUPRE,*) ZTGROUND        ! SST 
+    READ(ILUPRE,*) ZMRGROUND       ! SSS
+    WRITE(ILUOUT,FMT=*) 'Patm SST SSS', ZPTOP,ZTGROUND,ZMRGROUND
+    READ(ILUPRE,*) ILEVELU         ! Read number of Current levels
+    ! Allocate required memory 
+    ALLOCATE(ZHEIGHTU(ILEVELU),ZU(ILEVELU),ZV(ILEVELU))
+    ALLOCATE(ZOC_U(ILEVELU,1,1),ZOC_V(ILEVELU,1,1))
+    WRITE(ILUOUT,FMT=*) 'Level number for Current in data', ILEVELU
+    ! Read U and V at each wind level
+    DO JKU = 1,ILEVELU
+      READ(ILUPRE,*) ZHEIGHTU(JKU),ZOC_U(JKU,1,1),ZOC_V(JKU,1,1)
+      ! WRITE(ILUOUT,FMT=*) 'Leveldata D(m) under sfc: U_cur, V_cur', JKU, ZHEIGHTU(JKU),ZU(JKU),ZV(JKU)
+    END DO
+    DO JKU=1,ILEVELU
+      ! Z axis reoriented as in the model
+      IDX     = ILEVELU-JKU+1
+      ZU(JKU) = ZOC_U(IDX,1,1)
+      ZV(JKU) = ZOC_V(IDX,1,1)
+      ! ZHEIGHT used only in set_ rsou, defined as such ZHEIGHT(ILEVELM)=H_model
+      ! Z oriented in same time to have a model domain axis going
+      ! from 0m (ocean bottom/model bottom) towards H (ocean sfc/model top)
+    END DO
+    ! Read number of mass levels  
+    READ(ILUPRE,*) ILEVELM
+    ! Allocate required memory 
+    ALLOCATE(ZOC_DEPTH(ILEVELM))
+    ALLOCATE(ZHEIGHTM(ILEVELM))           
+    ALLOCATE(ZTHL(ILEVELM),ZTH(ILEVELM),ZTHV(ILEVELM)) 
+    ALLOCATE(ZMR(ILEVELM),ZRT(ILEVELM))
+    ALLOCATE(ZOC_TEMPERATURE(ILEVELM,1,1),ZOC_SALINITY(ILEVELM,1,1))
+    ! Read T and S at each mass level 
+    DO JKM= 2,ILEVELM
+      READ(ILUPRE,*) ZOC_DEPTH(JKM),ZOC_TEMPERATURE(JKM,1,1),ZOC_SALINITY(JKM,1,1)
+    END DO
+    ! Complete the mass arrays with the ground informations read in EXPRE file
+    ZOC_DEPTH(1)    = 0.                    
+    ZOC_TEMPERATURE(1,1,1)= ZTGROUND
+    ZOC_SALINITY(1,1,1)= ZMRGROUND
+    !!!!!!!!!!!!!!!!!!!!!!!!Inversing Axis!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+    ! Going from the data (axis downward i.e inverse model) grid to the model grid (axis upward)
+    ! Uniform bathymetry; depth goes from ocean sfc downwards  (data grid)
+    ! ZHEIGHT goes from the model domain bottom up to the sfc ocean (top of model domain)
+    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+    ZZGROUND   = 0.
+    ZTGROUND   = ZOC_TEMPERATURE(ILEVELM,1,1) 
+    ZMRGROUND  = ZOC_SALINITY(ILEVELM,1,1)
+    DO JKM= 1,ILEVELM
+      ! Z upward axis (oriented as in the model), i.e.
+      ! going from 0m (ocean bottom/model bottom) upward to H (ocean sfc/model top)
+      ! ZHEIGHT used only in set_ rsou, defined as such ZHEIGHT(ILEVELM)=H_model
+      IDX          = ILEVELM-JKM+1
+      ZTH(JKM)      = ZOC_TEMPERATURE(IDX,1,1)
+      ZMR(JKM)     = ZOC_SALINITY(IDX,1,1)
+      ZHEIGHTM(JKM)= ZOC_DEPTH(ILEVELM)- ZOC_DEPTH(IDX)
+      WRITE(ILUOUT,FMT=*) 'Model oriented initial data: JKM IDX depth T S ZHEIGHTM', &
+                      JKM,IDX,ZOC_DEPTH(IDX),ZTH(JKM),ZMR(JKM),ZHEIGHTM(JKM)
+    END DO
+    ! mass levels of the RS
+    ZTHV = ZTH ! TV==THETA=TL
+    ZTHL = ZTH
+    ZRT  = ZMR  
+    !!!!!!!!!!!!!!!!!!!!!!!!!!!!
+    ! READ Sea Surface Forcing !
+    !!!!!!!!!!!!!!!!!!!!!!!!!!!!
+    ! Reading the forcings from prep_idea1.nam
+    READ(ILUPRE,*) IFRCLT  ! Number of time-dependent forcing 
+    IF (IFRCLT > 99*8) THEN
+      ! CAUTION: number of forcing times is limited by the WRITE format 99(8E10.3)
+      !          and also by the name of forcing variables (format I3.3)
+      !          You have to modify those if you need more forcing times
+     CALL PRINT_MSG(NVERB_FATAL,'IO','SET_RSOU','maximum forcing times NFRCLT is 99*8')
+    END IF
+!
+    WRITE(UNIT=ILUOUT,FMT='(" THERE ARE ",I2," SFC FLUX FORCINGs AT:")') IFRCLT
+    ALLOCATE(ZFRCLT(IFRCLT))
+    ALLOCATE(ZSSUFL_T(IFRCLT)); ZSSUFL_T = 0.0
+    ALLOCATE(ZSSVFL_T(IFRCLT)); ZSSVFL_T = 0.0
+    ALLOCATE(ZSSTFL_T(IFRCLT)); ZSSTFL_T = 0.0
+    ALLOCATE(ZSSOLA_T(IFRCLT)); ZSSOLA_T = 0.0
+    DO JKT = 1,IFRCLT
+      WRITE(ILUOUT,FMT='(A, I4)') "SET_RSOU/Reading Sea Surface forcing: Number=", JKT
+      READ(ILUPRE,*) ZFRCLT(JKT)%nyear, ZFRCLT(JKT)%nmonth, &
+                     ZFRCLT(JKT)%nday,  ZFRCLT(JKT)%xtime
+      READ(ILUPRE,*) ZSSUFL_T(JKT)
+      READ(ILUPRE,*) ZSSVFL_T(JKT)
+      READ(ILUPRE,*) ZSSTFL_T(JKT)
+      READ(ILUPRE,*) ZSSOLA_T(JKT)
+    END DO
 !
-!*       2.1  STANDARD case : ZGROUND, PGROUND, TGROUND, TDGROUND
+    DO JKT = 1 , IFRCLT
+      WRITE(UNIT=ILUOUT,FMT='(F9.0, "s, date:", I3, "/", I3, "/", I5)') &
+                 ZFRCLT(JKT)%xtime,         ZFRCLT(JKT)%nday,   &
+                 ZFRCLT(JKT)%nmonth, ZFRCLT(JKT)%nyear
+    END DO
+    NINFRT= INT(ZFRCLT(2)%xtime)
+    WRITE(ILUOUT,FMT='(A)') &
+         "Number U-Stress, V-Stress, Heat turb Flux, Solar Flux Interval(s)",NINFRT
+    DO JKT = 1, IFRCLT
+      WRITE(ILUOUT,FMT='(I10,99(3F10.2))') JKT, ZSSUFL_T(JKT),ZSSVFL_T(JKT),ZSSTFL_T(JKT) 
+    END DO
+    NFRCLT = IFRCLT
+    ALLOCATE(TFRCLT(NFRCLT))
+    ALLOCATE(XSSUFL_T(NFRCLT));XSSUFL_T(:)=0.
+    ALLOCATE(XSSVFL_T(NFRCLT));XSSVFL_T(:)=0.
+    ALLOCATE(XSSTFL_T(NFRCLT));XSSTFL_T(:)=0.
+    ALLOCATE(XSSOLA_T(NFRCLT));XSSOLA_T(:)=0.
+!
+    DO JKT=1,NFRCLT
+      TFRCLT(JKT)= ZFRCLT(JKT)
+      XSSUFL_T(JKT)=ZSSUFL_T(JKT)/XRH00OCEAN
+      XSSVFL_T(JKT)=ZSSVFL_T(JKT)/XRH00OCEAN
+      ! working in SI
+      XSSTFL_T(JKT)=ZSSTFL_T(JKT) /(3900.*XRH00OCEAN)
+      XSSOLA_T(JKT)=ZSSOLA_T(JKT) /(3900.*XRH00OCEAN)
+    END DO   
+    DEALLOCATE(ZFRCLT)
+    DEALLOCATE(ZSSUFL_T)
+    DEALLOCATE(ZSSVFL_T)
+    DEALLOCATE(ZSSTFL_T)
+    DEALLOCATE(ZSSOLA_T)
+!
+!--------------------------------------------------------------------------------   
+! 2.0.2  Ocean standard initialize from netcdf files
+!        U,V,T,S at Z levels + Forcings at model TOP (sea surface) 
+!--------------------------------------------------------------------------------   
+!
+  CASE ('STANDOCE')
+!
+    READ(ILUPRE,*) ZPTOP           ! P_atmosphere at sfc =P top domain     
+    READ(ILUPRE,*) INFILE,INFISF
+    WRITE(ILUOUT,FMT=*) 'Netcdf files to read:',INFILE,INFISF
+    ! Open file containing initial profiles
+    CALL check(nf90_open(infile,NF90_NOWRITE,ncid), "opening NC file")
+    ! Reading dimensions and lengths
+    CALL check( nf90_inq_dimid(ncid, "depth",ndimp), "getting depth  dimension id" )
+    CALL check( nf90_inquire_dimension(ncid, ndimp, len=NZ), "getting NZ "  )
+    CALL check( nf90_inquire_dimension(ncid, 2, len=NLONGI), "getting NLONG "  )
+    CALL check( nf90_inquire_dimension(ncid, 1, len=NLATI), "getting NLAT "  )
+!   
+    WRITE(ILUOUT,FMT=*) 'NB LEVLS READ NZ, NLONG NLAT ', NZ, NLONGI,NLATI
+    ALLOCATE(ZOC_TEMPERATURE(NLATI,NLONGI,NZ),ZOC_SALINITY(NLATI,NLONGI,NZ))
+    ALLOCATE(ZOC_U(NLATI,NLONGI,NZ),ZOC_V(NLATI,NLONGI,NZ))
+    ALLOCATE(ZOC_DEPTH(NZ))
+    WRITE(ILUOUT,FMT=*) 'NETCDF READING ==> Temp'
+    CALL check(nf90_inq_varid(ncid,"temperature",varid), "getting temp varid")
+    CALL check(nf90_get_var(ncid,varid,ZOC_TEMPERATURE), "reading temp")
+    WRITE(ILUOUT,FMT=*) 'Netcdf Reading ==> salinity'
+    CALL check(nf90_inq_varid(ncid,"salinity",varid), "getting salinity varid")
+    CALL check(nf90_get_var(ncid,varid,ZOC_SALINITY), "reading salinity")
+    WRITE(ILUOUT,FMT=*) 'Netcdf ==> Reading depth'
+    CALL check(nf90_inq_varid(ncid,"depth",varid), "getting depth varid")
+    CALL check(nf90_get_var(ncid,varid,ZOC_DEPTH), "reading depth")
+    WRITE(ILUOUT,FMT=*) 'depth: max min ', MAXVAL(ZOC_DEPTH),MINVAL(ZOC_DEPTH)
+    WRITE(ILUOUT,FMT=*) 'depth 1 nz: ', ZOC_DEPTH(1),ZOC_DEPTH(NZ)
+    WRITE(ILUOUT,FMT=*) 'Netcdf Reading ==> Currents'
+    CALL check(nf90_inq_varid(ncid,"u",varid), "getting u varid")
+    CALL check(nf90_get_var(ncid,varid,ZOC_U), "reading u")
+    CALL check(nf90_inq_varid(ncid,"v",varid), "getting v varid")
+    CALL check(nf90_get_var(ncid,varid,ZOC_V), "reading v")
+    CALL check(nf90_close(ncid), "closing infile")
+    WRITE(ILUOUT,FMT=*) 'End of initial file reading'
+!
+    DO JKM=1,NZ
+     ZOC_TEMPERATURE(1,1,JKM)=ZOC_TEMPERATURE(1,1,JKM)+273.15
+     WRITE(ILUOUT,FMT=*) 'Z T(Kelvin) S(Sverdup) U V K',&
+     JKM,ZOC_DEPTH(JKM),ZOC_TEMPERATURE(1,1,JKM),ZOC_SALINITY(1,1,JKM),ZOC_U(1,1,JKM),ZOC_V(1,1,JKM), JKM
+    ENDDO
+    !  number of data levels
+    ILEVELM=NZ
+    ! Model bottom
+    ZTGROUND  = ZOC_TEMPERATURE(1,1,ILEVELM)
+    ZMRGROUND = ZOC_SALINITY(1,1,ILEVELM)
+    ZZGROUND=0.
+    ! Allocate required memory
+    ALLOCATE(ZHEIGHTM(ILEVELM))           
+    ALLOCATE(ZT(ILEVELM))
+    ALLOCATE(ZTV(ILEVELM))
+    ALLOCATE(ZMR(ILEVELM))
+    ALLOCATE(ZTHV(ILEVELM)) 
+    ALLOCATE(ZTHL(ILEVELM))
+    ALLOCATE(ZRT(ILEVELM))
+    !  Going from the inverse model grid (data) to the normal one
+    DO JKM= 1,ILEVELM
+      ! Z axis reoriented as in the model
+      IDX     = ILEVELM-JKM+1
+      ZT(JKM) = ZOC_TEMPERATURE(1,1,IDX)
+      ZMR(JKM)  =  ZOC_SALINITY(1,1,IDX)
+      ! ZHEIGHT used only in set_ rsou, defined as such ZHEIGHT(ILEVELM)=H_model
+      ! Z oriented in same time to have a model domain axis going
+      ! from 0m (ocean bottom/model bottom) towards H (ocean sfc/model top)
+      ! translation/inversion
+      ZHEIGHTM(JKM) = -ZOC_DEPTH(IDX) + ZOC_DEPTH(ILEVELM)
+      WRITE(ILUOUT,FMT=*) 'End gridmodel comput: JKM IDX depth T S ZHEIGHTM', &
+      JKM,IDX,ZOC_DEPTH(IDX),ZT(JKM),ZMR(JKM),ZHEIGHTM(JKM)
+    END DO
+    ! complete ther variables
+    ZTV  = ZT
+    ZTHV = ZT
+    ZRT  = ZMR
+    ZTHL = ZT
+    ZTH  = ZT
+    ! INIT --- U V -----
+    ILEVELU=nz               ! Same nb of levels for u,v,T,S
+    !Assume that current and temp are given at same level
+    ALLOCATE(ZHEIGHTU(ILEVELU))           
+    ALLOCATE(ZU(ILEVELU),ZV(ILEVELU))
+    ZHEIGHTU=ZHEIGHTM
+    DO JKM= 1,ILEVELU
+      ! Z axis reoriented as in the model
+      IDX     = ILEVELU-JKM+1
+      ZU(JKM) = ZOC_U(1,1,IDX)
+      ZV(JKM) = ZOC_V(1,1,IDX)
+      ! ZHEIGHT used only in set_ rsou, defined as such ZHEIGHT(ILEVELM)=H_model
+      ! Z oriented in same time to have a model domain axis going
+      ! from 0m (ocean bottom/model bottom) towards H (ocean sfc/model top)
+    END DO
+!
+    DEALLOCATE(ZOC_TEMPERATURE)
+    DEALLOCATE(ZOC_SALINITY)
+    DEALLOCATE(ZOC_U)
+    DEALLOCATE(ZOC_V)
+    DEALLOCATE(ZOC_DEPTH)
+!
+    ! Reading/initializing  surface forcings
+!
+    WRITE(ILUOUT,FMT=*) 'netcdf sfc forcings file to be read:',infisf  
+    ! Open of sfc forcing file
+    CALL check(nf90_open(infisf,NF90_NOWRITE,ncid), "opening NC file")
+    ! Reading dimension and length
+    CALL check( nf90_inq_dimid(ncid,"t",ndimp), "getting  time dimension id" )
+    CALL check( nf90_inquire_dimension(ncid, ndimp, len=ntcindy), "getting ntcindy "  )
+!
+    WRITE(ILUOUT,FMT=*) 'nb sfc-forcing time ntcindy=',ntcindy   
+    ALLOCATE(ZOC_LE(ntcindy))    
+    ALLOCATE(ZOC_H(ntcindy))    
+    ALLOCATE(ZOC_SW_DOWN(ntcindy))    
+    ALLOCATE(ZOC_SW_UP(ntcindy))    
+    ALLOCATE(ZOC_LW_DOWN(ntcindy))    
+    ALLOCATE(ZOC_LW_UP(ntcindy))    
+    ALLOCATE(ZOC_TAUX(ntcindy))
+    ALLOCATE(ZOC_TAUY(ntcindy))
+!
+    WRITE(ILUOUT,FMT=*)'Netcdf Reading ==> LE'  
+    CALL check(nf90_inq_varid(ncid,"LE",varid), "getting LE varid")
+    CALL check(nf90_get_var(ncid,varid,ZOC_LE), "reading LE flux")
+    WRITE(ILUOUT,FMT=*)'Netcdf Reading ==> H'  
+    CALL check(nf90_inq_varid(ncid,"H",varid), "getting H varid")
+    CALL check(nf90_get_var(ncid,varid,ZOC_H), "reading H flux")
+    WRITE(ILUOUT,FMT=*) 'Netcdf Reading ==> SW_DOWN'  
+    CALL check(nf90_inq_varid(ncid,"SW_DOWN",varid), "getting SW_DOWN varid")
+    CALL check(nf90_get_var(ncid,varid,ZOC_SW_DOWN), "reading SW_DOWN")
+    WRITE(ILUOUT,FMT=*) 'Netcdf Reading ==> SW_UP'  
+    CALL check(nf90_inq_varid(ncid,"SW_UP",varid), "getting SW_UP varid")
+    CALL check(nf90_get_var(ncid,varid,ZOC_SW_UP), "reading SW_UP")
+    WRITE(ILUOUT,FMT=*) 'Netcdf Reading ==> LW_DOWN'  
+    CALL check(nf90_inq_varid(ncid,"LW_DOWN",varid), "getting LW_DOWN varid")
+    CALL check(nf90_get_var(ncid,varid,ZOC_LW_DOWN), "reading LW_DOWN")
+    WRITE(ILUOUT,FMT=*) 'Netcdf Reading ==> LW_UP'  
+    CALL check(nf90_inq_varid(ncid,"LW_UP",varid), "getting LW_UP varid")
+    CALL check(nf90_get_var(ncid,varid,ZOC_LW_UP), "reading LW_UP")
+    WRITE(ILUOUT,FMT=*) 'Netcdf Reading ==> TAUX'  
+    CALL check(nf90_inq_varid(ncid,"TAUX",varid), "getting TAUX varid")
+    CALL check(nf90_get_var(ncid,varid,ZOC_TAUX), "reading TAUX")
+    WRITE(ILUOUT,FMT=*) 'Netcdf Reading ==> TAUY'  
+    CALL check(nf90_inq_varid(ncid,"TAUY",varid), "getting TAUY varid")
+    CALL check(nf90_get_var(ncid,varid,ZOC_TAUY), "reading TAUY")
+    CALL check(nf90_close(ncid), "closing infisfS")
+!
+    WRITE(ILUOUT,FMT=*) '  Forcing-Number    LE     H     SW_down     SW_up    LW_down   LW_up TauX TauY' 
+    DO JKM=1,NTCINDY
+      WRITE(ILUOUT,FMT=*) JKM, ZOC_LE(JKM), ZOC_H(JKM),ZOC_SW_DOWN(JKM),ZOC_SW_UP(JKM),&
+                          ZOC_LW_DOWN(JKM),ZOC_LW_UP(JKM),ZOC_TAUX(JKM),ZOC_TAUY(JKM)   
+    ENDDO
+    ! IFRCLT FORCINGS at sea surface
+    IFRCLT=NTCINDY
+    ALLOCATE(ZFRCLT(IFRCLT)) 
+    ALLOCATE(ZSSUFL_T(IFRCLT)); ZSSUFL_T = 0.0
+    ALLOCATE(ZSSVFL_T(IFRCLT)); ZSSVFL_T = 0.0
+    ALLOCATE(ZSSTFL_T(IFRCLT)); ZSSTFL_T = 0.0
+    ALLOCATE(ZSSOLA_T(IFRCLT)); ZSSOLA_T = 0.0
+    DO JKT=1,IFRCLT
+      ! Initial file for CINDY-DYNAMO: all fluxes correspond to the absolute value (>0)
+      ! modele ocean: axe z dirigé du bas vers la sfc de l'océan
+      ! => flux dirigé vers le haut (positif ocean vers l'atmopshere i.e. bas vers le haut)
+      ZSSOLA_T(JKT)=ZOC_SW_DOWN(JKT)-ZOC_SW_UP(JKT)
+      ZSSTFL_T(JKT)=(ZOC_LW_DOWN(JKT)-ZOC_LW_UP(JKT)-ZOC_LE(JKT)-ZOC_H(JKT))
+      ! assume that Tau given on file is along Ox
+      ! rho_air UW_air = rho_ocean UW_ocean= N/m2
+      ! uw_ocean
+      ZSSUFL_T(JKT)=ZOC_TAUX(JKT)
+      ZSSVFL_T(JKT)=ZOC_TAUY(JKT)
+      WRITE(ILUOUT,FMT=*) 'Forcing Nb Sol NSol UW_oc VW',&
+                          JKT,ZSSOLA_T(JKT),ZSSTFL_T(JKT),ZSSUFL_T(JKT),ZSSVFL_T(JKT) 
+    ENDDO
+    ! Allocate and Writing the corresponding variables in module MODD_OCEAN_FRC
+    NFRCLT=IFRCLT
+    ! value to read later on file ? 
+    NINFRT=600
+    ALLOCATE(TFRCLT(NFRCLT))
+    ALLOCATE(XSSUFL_T(NFRCLT));XSSUFL_T(:)=0.
+    ALLOCATE(XSSVFL_T(NFRCLT));XSSVFL_T(:)=0.
+    ALLOCATE(XSSTFL_T(NFRCLT));XSSTFL_T(:)=0.
+    ALLOCATE(XSSOLA_T(NFRCLT));XSSOLA_T(:)=0.
+    ! on passe en unités SI, signe, etc pour le modele ocean
+    !  W/m2 => SI :  /(CP_mer * rho_mer)
+    ! a revoir dans tt le code pour mettre de svaleurs plus exactes
+    DO JKT=1,NFRCLT
+      TFRCLT(JKT)= ZFRCLT(JKT)
+      XSSUFL_T(JKT)=ZSSUFL_T(JKT)/XRH00OCEAN
+      XSSVFL_T(JKT)=ZSSVFL_T(JKT)/XRH00OCEAN
+      XSSTFL_T(JKT)=ZSSTFL_T(JKT) /(3900.*XRH00OCEAN)
+      XSSOLA_T(JKT)=ZSSOLA_T(JKT) /(3900.*XRH00OCEAN)
+    END DO   
+    DEALLOCATE(ZFRCLT)
+    DEALLOCATE(ZSSUFL_T)
+    DEALLOCATE(ZSSVFL_T)
+    DEALLOCATE(ZSSTFL_T)
+    DEALLOCATE(ZSSOLA_T)
+    DEALLOCATE(ZOC_LE)    
+    DEALLOCATE(ZOC_H)    
+    DEALLOCATE(ZOC_SW_DOWN)    
+    DEALLOCATE(ZOC_SW_UP)    
+    DEALLOCATE(ZOC_LW_DOWN)    
+    DEALLOCATE(ZOC_LW_UP)    
+    DEALLOCATE(ZOC_TAUX)
+    DEALLOCATE(ZOC_TAUY)
+    ! END OCEAN STANDARD
+!
+!
+!*       2.1  ATMOSPHERIC STANDARD case : ZGROUND, PGROUND, TGROUND, TDGROUND
 !                               (Pressure, dd, ff) , 
 !                               (Pressure, T, Td)
 !
@@ -448,8 +811,7 @@ SELECT CASE(YKIND)
     ALLOCATE(ZHEIGHTM(ILEVELM))    ! Allocate memory for needed 
     ALLOCATE(ZTHV(ILEVELM))        !  arrays
     ALLOCATE(ZMR(ILEVELM))
-    ALLOCATE(ZTV(ILEVELM))         ! Allocate memory for intermediate
-                                     !  arrays
+    ALLOCATE(ZTV(ILEVELM))         ! Allocate memory for intermediate arrays
     ALLOCATE(ZTHL(ILEVELM))
     ALLOCATE(ZRT(ILEVELM))                                              
 !
@@ -1203,20 +1565,36 @@ END DO
 ALLOCATE(ZEXNFLUX(IKU))
 ALLOCATE(ZEXNMASS(IKU))
 ALLOCATE(ZPRESS(IKU))
+ALLOCATE(ZPREFLUX(IKU))
 ALLOCATE(ZFRAC_ICE(IKU))
 ALLOCATE(ZRSATW(IKU))
 ALLOCATE(ZRSATI(IKU))
 ALLOCATE(ZMRT(IKU))
 ZMRT=ZMRM+ZMRCM+ZMRIM
-ZEXNSURF=(ZPGROUND/XP00)**(XRD/XCPD)
 ZTHVM=ZTHLM
-DO JLOOP=1,20 ! loop for pression 
-  CALL COMPUTE_EXNER_FROM_GROUND(ZTHVM,ZZMASS_PROFILE(:),ZEXNSURF,ZEXNFLUX,ZEXNMASS)
-  ZPRESS(:)=XP00*(ZEXNMASS(:))**(XCPD/XRD)
-  CALL TH_R_FROM_THL_RT_1D('T',ZFRAC_ICE,ZPRESS,ZTHLM,ZMRT,ZTHM,ZMRM,ZMRCM,ZMRIM, &
-                            ZRSATW, ZRSATI)
-   ZTHVM(:)=ZTHM(:)*(1.+XRV/XRD*ZMRM(:))/(1.+(ZMRM(:)+ZMRIM(:)+ZMRCM(:)))
-ENDDO
+!
+IF (LOCEAN) THEN
+  ZRHODM(:)=XRH00OCEAN*(1.-XALPHAOC*(ZTHLM(:) - XTH00OCEAN)&
+          +XBETAOC* (ZMRM(:)  - XSA00OCEAN))
+  ZPREFLUX(IKU)=ZPTOP
+  DO JK=IKU-1,2,-1
+    ZPREFLUX(JK) = ZPREFLUX(JK+1) + XG*ZRHODM(JK)*(ZZFLUX_PROFILE(JK+1)-ZZFLUX_PROFILE(JK))
+  END DO
+  ZPGROUND=ZPREFLUX(2)
+  WRITE(ILUOUT,FMT=*)'ZPGROUND i.e. Pressure at ocean domain bottom',ZPGROUND
+  ZTHM=ZTHVM
+ELSE
+! Atmospheric case   
+  ZEXNSURF=(ZPGROUND/XP00)**(XRD/XCPD)
+  DO JLOOP=1,20 ! loop for pression 
+    CALL COMPUTE_EXNER_FROM_GROUND(ZTHVM,ZZMASS_PROFILE(:),ZEXNSURF,ZEXNFLUX,ZEXNMASS)
+    ZPRESS(:)=XP00*(ZEXNMASS(:))**(XCPD/XRD)
+    CALL TH_R_FROM_THL_RT_1D('T',ZFRAC_ICE,ZPRESS,ZTHLM,ZMRT,ZTHM,ZMRM,ZMRCM,ZMRIM, &
+                              ZRSATW, ZRSATI)
+     ZTHVM(:)=ZTHM(:)*(1.+XRV/XRD*ZMRM(:))/(1.+(ZMRM(:)+ZMRIM(:)+ZMRCM(:)))
+  ENDDO
+ENDIF
+!
 DEALLOCATE(ZEXNFLUX)
 DEALLOCATE(ZEXNMASS)
 DEALLOCATE(ZPRESS)
@@ -1224,7 +1602,6 @@ DEALLOCATE(ZFRAC_ICE)
 DEALLOCATE(ZRSATW)
 DEALLOCATE(ZRSATI)       
 DEALLOCATE(ZMRT)
-
 !-------------------------------------------------------------------------------
 !
 !* 4.     COMPUTE FIELDS ON THE MODEL GRID (WITH OROGRAPHY)
@@ -1234,6 +1611,20 @@ CALL SET_MASS(TPFILE,GPROFILE_IN_PROC, ZZFLUX_PROFILE,                      &
               ZTHVM,ZMRM,ZUW,ZVW,OSHIFT,OBOUSS,PJ,HFUNU,HFUNV,              &
               PMRCM=ZMRCM,PMRIM=ZMRIM,PCORIOZ=PCORIOZ)
 !
+DEALLOCATE(ZPREFLUX)
+DEALLOCATE(ZHEIGHTM)          
+DEALLOCATE(ZTHV)
+DEALLOCATE(ZMR)
+DEALLOCATE(ZTHL)
 !-------------------------------------------------------------------------------
+CONTAINS
+  SUBROUTINE CHECK(STATUS,LOC)
+    INTEGER, INTENT(IN) :: STATUS
+    CHARACTER(LEN=*), INTENT(IN) :: LOC
+    IF(STATUS /= NF90_NOERR) THEN
+       WRITE(ILUOUT,FMT=*) "Error at ", LOC
+      WRITE(ILUOUT,FMT=*) NF90_STRERROR(STATUS)
+    END IF
+  END SUBROUTINE check
 !
 END SUBROUTINE SET_RSOU
diff --git a/src/MNH/spawn_model2.f90 b/src/MNH/spawn_model2.f90
index 82c8f1ecac1eb09d844ef9c48dd3e30a7b0e3d5e..81baecd56f380ce62aca8e065907d4a6b5a6d9a7 100644
--- a/src/MNH/spawn_model2.f90
+++ b/src/MNH/spawn_model2.f90
@@ -1525,6 +1525,7 @@ IF (NVERB >= 5) THEN
   WRITE(ILUOUT,*) 'SPAWN_MODEL2: NVERB=',NVERB
   WRITE(ILUOUT,*) 'SPAWN_MODEL2: XLON0,XLAT0,XBETA=',XLON0,XLAT0,XBETA
   WRITE(ILUOUT,*) 'SPAWN_MODEL2: LCARTESIAN=',LCARTESIAN
+  WRITE(ILUOUT,*) 'SPAWN_MODEL2: LOCEAN,LCOUPLES=',LOCEAN,LCOUPLES
   IF(LCARTESIAN) THEN
     WRITE(ILUOUT,*) 'SPAWN_MODEL2: No map projection used.'
   ELSE
diff --git a/src/MNH/th_r_from_thl_rt_1d.f90 b/src/MNH/th_r_from_thl_rt_1d.f90
index fcec2372fd5ff3a140c04b04df94a31073645167..6149852c13b350153f94245a4a6bcb5b4df969d4 100644
--- a/src/MNH/th_r_from_thl_rt_1d.f90
+++ b/src/MNH/th_r_from_thl_rt_1d.f90
@@ -1,3 +1,7 @@
+!MNH_LIC Copyright 1994-2021 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.
 !     ######spl
       MODULE MODI_TH_R_FROM_THL_RT_1D
 !     ###############################
@@ -67,7 +71,8 @@ REAL, DIMENSION(:), INTENT(OUT)  :: PRSATI ! estimated mixing ration at saturati
 !          ------------
 !
 USE MODI_COMPUTE_FRAC_ICE
-USE MODD_CST !, ONLY: XP00, XRD, XCPD, XCPV, XCL, XCI, XLVTT, XTT, XLSTT
+USE MODD_CST
+USE MODD_DYN_n, ONLY : LOCEAN
 USE MODE_THERMO
 !
 IMPLICIT NONE
@@ -131,8 +136,11 @@ PTH(:)=PTHL(:)+ZLVOCPEXN(:)*PRL(:)+ZLSOCPEXN(:)*PRI(:)
 !         ---------
 
 DO II=1,JITER
-  ZT(:)=PTH(:)*ZEXN(:)
-
+  IF (LOCEAN) THEN
+    ZT=PTH                  
+  ELSE
+    ZT(:)=PTH(:)*ZEXN(:)
+  END IF
   !Computation of liquid/ice fractions
   PFRAC_ICE(:) = 0.
   WHERE(PRL(:)+PRI(:) > 1.E-20)
diff --git a/src/MNH/turb.f90 b/src/MNH/turb.f90
index cc09425a87ef4a81be15d4d2edb65a21a5492ed8..0074628147dd16a5e56f3fff71188cbffd4ee656 100644
--- a/src/MNH/turb.f90
+++ b/src/MNH/turb.f90
@@ -345,6 +345,7 @@ END MODULE MODI_TURB
 !  P. Wautelet + Benoit Vié 06/2020: improve removal of negative scalar variables + adapt the corresponding budgets
 !  P. Wautelet 30/06/2020: move removal of negative scalar variables to Sources_neg_correct
 !  R. Honnert/V. Masson 02/2021: new mixing length in the grey zone
+!! J.L. Redelsperger 03/2021: add Ocean LES case
 ! --------------------------------------------------------------------------
 !
 !*      0. DECLARATIONS
@@ -358,12 +359,14 @@ use modd_budget,      only: lbudget_u,  lbudget_v,  lbudget_w,  lbudget_th, lbud
 USE MODD_CONF
 USE MODD_CST
 USE MODD_CTURB
+USE MODD_DYN_n, ONLY : LOCEAN
 use modd_field,          only: tfielddata, TYPEREAL
 USE MODD_IO, ONLY: TFILEDATA
 USE MODD_LES
 USE MODD_NSV
 USE MODD_PARAMETERS, ONLY: JPVEXT_TURB
 USE MODD_PARAM_LIMA
+USE MODD_REF
 USE MODD_TURB_n, ONLY: XCADAP
 !
 USE MODI_GRADIENT_M
@@ -643,7 +646,11 @@ END DO
 !
 !*      2.2 Exner function at t
 !
-ZEXN(:,:,:) = (PPABST(:,:,:)/XP00) ** (XRD/XCPD)
+IF (LOCEAN) THEN
+  ZEXN(:,:,:) = 1.
+ELSE
+  ZEXN(:,:,:) = (PPABST(:,:,:)/XP00) ** (XRD/XCPD)
+END IF
 !
 !*      2.3 dissipative heating coeff a t
 !
@@ -1512,15 +1519,26 @@ IF (.NOT. ORMC01) THEN
   !
   DO JJ=1,SIZE(PUT,2)
     DO JI=1,SIZE(PUT,1)
-      DO JK=IKTB,IKTE
-        ZD=ZALPHA*(0.5*(PZZ(JI,JJ,JK)+PZZ(JI,JJ,JK+KKL))&
-        -PZZ(JI,JJ,IKB)) *PDIRCOSZW(JI,JJ)
-        IF ( PLM(JI,JJ,JK)>ZD) THEN
-          PLM(JI,JJ,JK)=ZD
-        ELSE
-          EXIT
-        ENDIF
-      END DO
+      IF (LOCEAN) THEN
+        DO JK=IKTE,IKTB,-1
+          ZD=ZALPHA*(PZZ(JI,JJ,IKTE+1)-PZZ(JI,JJ,JK))
+          IF ( PLM(JI,JJ,JK)>ZD) THEN
+            PLM(JI,JJ,JK)=ZD
+          ELSE
+            EXIT
+          ENDIF
+       END DO
+      ELSE
+        DO JK=IKTB,IKTE
+          ZD=ZALPHA*(0.5*(PZZ(JI,JJ,JK)+PZZ(JI,JJ,JK+KKL))&
+          -PZZ(JI,JJ,IKB)) *PDIRCOSZW(JI,JJ)
+          IF ( PLM(JI,JJ,JK)>ZD) THEN
+            PLM(JI,JJ,JK)=ZD
+          ELSE
+            EXIT
+          ENDIF
+        END DO
+      ENDIF   
     END DO
   END DO
 END IF
@@ -1587,7 +1605,6 @@ END IF
 ZETHETA(:,:,:) = ETHETA(KRR,KRRI,PTHLT,PRT,ZLOCPEXNM,ZATHETA,PSRCT)
 ZEMOIST(:,:,:) = EMOIST(KRR,KRRI,PTHLT,PRT,ZLOCPEXNM,ZAMOIST,PSRCT)
 !
-! For dry simulations
 IF (KRR>0) THEN
   DO JK = IKTB+1,IKTE-1
     DO JJ=1,SIZE(PUT,2)
@@ -1596,8 +1613,12 @@ IF (KRR>0) THEN
                                 (PTHLT(JI,JJ,JK    )-PTHLT(JI,JJ,JK-KKL))/PDZZ(JI,JJ,JK    ))
         ZDRTDZ(JI,JJ,JK) = 0.5*((PRT(JI,JJ,JK+KKL,1)-PRT(JI,JJ,JK    ,1))/PDZZ(JI,JJ,JK+KKL)+ &
                                 (PRT(JI,JJ,JK    ,1)-PRT(JI,JJ,JK-KKL,1))/PDZZ(JI,JJ,JK    ))
-        ZVAR=XG/PTHVREF(JI,JJ,JK)*                                                  &
+        IF (LOCEAN) THEN
+          ZVAR=XG*(XALPHAOC*ZDTHLDZ(JI,JJ,JK)-XBETAOC*ZDRTDZ(JI,JJ,JK))
+        ELSE
+          ZVAR=XG/PTHVREF(JI,JJ,JK)*                                                  &
              (ZETHETA(JI,JJ,JK)*ZDTHLDZ(JI,JJ,JK)+ZEMOIST(JI,JJ,JK)*ZDRTDZ(JI,JJ,JK))
+        END IF
         !
         IF (ZVAR>0.) THEN
           PLM(JI,JJ,JK)=MAX(XMNH_EPSILON,MIN(PLM(JI,JJ,JK), &
@@ -1606,14 +1627,18 @@ IF (KRR>0) THEN
       END DO
     END DO
   END DO
-ELSE
+ELSE! For dry atmos or unsalted ocean runs
   DO JK = IKTB+1,IKTE-1
     DO JJ=1,SIZE(PUT,2)
       DO JI=1,SIZE(PUT,1)
         ZDTHLDZ(JI,JJ,JK)= 0.5*((PTHLT(JI,JJ,JK+KKL)-PTHLT(JI,JJ,JK    ))/PDZZ(JI,JJ,JK+KKL)+ &
                                 (PTHLT(JI,JJ,JK    )-PTHLT(JI,JJ,JK-KKL))/PDZZ(JI,JJ,JK    ))
-        ZVAR=XG/PTHVREF(JI,JJ,JK)*ZETHETA(JI,JJ,JK)*ZDTHLDZ(JI,JJ,JK)
-        !
+        IF (LOCEAN) THEN
+          ZVAR= XG*XALPHAOC*ZDTHLDZ(JI,JJ,JK)
+        ELSE
+          ZVAR= XG/PTHVREF(JI,JJ,JK)*ZETHETA(JI,JJ,JK)*ZDTHLDZ(JI,JJ,JK)
+        END IF
+!
         IF (ZVAR>0.) THEN
           PLM(JI,JJ,JK)=MAX(XMNH_EPSILON,MIN(PLM(JI,JJ,JK), &
                         0.76* SQRT(PTKET(JI,JJ,JK)/ZVAR)))
@@ -1631,8 +1656,12 @@ ELSE
   ZDRTDZ(:,:,IKB)=0
 ENDIF
 !
-ZWORK2D(:,:)=XG/PTHVREF(:,:,IKB)*                                           &
-            (ZETHETA(:,:,IKB)*ZDTHLDZ(:,:,IKB)+ZEMOIST(:,:,IKB)*ZDRTDZ(:,:,IKB))
+IF (LOCEAN) THEN
+  ZWORK2D(:,:)=XG*(XALPHAOC*ZDTHLDZ(:,:,IKB)-XBETAOC*ZDRTDZ(:,:,IKB))
+ELSE
+  ZWORK2D(:,:)=XG/PTHVREF(:,:,IKB)*                                           &
+              (ZETHETA(:,:,IKB)*ZDTHLDZ(:,:,IKB)+ZEMOIST(:,:,IKB)*ZDRTDZ(:,:,IKB))
+END IF
 WHERE(ZWORK2D(:,:)>0.)
   PLM(:,:,IKB)=MAX(XMNH_EPSILON,MIN( PLM(:,:,IKB),                 &
                     0.76* SQRT(PTKET(:,:,IKB)/ZWORK2D(:,:))))
@@ -1645,15 +1674,26 @@ IF (.NOT. ORMC01) THEN
   !
   DO JJ=1,SIZE(PUT,2)
     DO JI=1,SIZE(PUT,1)
-      DO JK=IKTB,IKTE
-        ZD=ZALPHA*(0.5*(PZZ(JI,JJ,JK)+PZZ(JI,JJ,JK+KKL))-PZZ(JI,JJ,IKB)) &
-          *PDIRCOSZW(JI,JJ)
-        IF ( PLM(JI,JJ,JK)>ZD) THEN
-          PLM(JI,JJ,JK)=ZD
-        ELSE
-          EXIT
-        ENDIF
-      END DO
+      IF (LOCEAN) THEN
+        DO JK=IKTE,IKTB,-1
+          ZD=ZALPHA*(PZZ(JI,JJ,IKTE+1)-PZZ(JI,JJ,JK))
+          IF ( PLM(JI,JJ,JK)>ZD) THEN
+            PLM(JI,JJ,JK)=ZD
+          ELSE
+            EXIT
+          ENDIF
+        END DO
+      ELSE
+        DO JK=IKTB,IKTE
+          ZD=ZALPHA*(0.5*(PZZ(JI,JJ,JK)+PZZ(JI,JJ,JK+KKL))-PZZ(JI,JJ,IKB)) &
+            *PDIRCOSZW(JI,JJ)
+          IF ( PLM(JI,JJ,JK)>ZD) THEN
+            PLM(JI,JJ,JK)=ZD
+          ELSE
+            EXIT
+          ENDIF
+        END DO
+      ENDIF 
     END DO
   END DO
 END IF
diff --git a/src/MNH/turb_ver.f90 b/src/MNH/turb_ver.f90
index fce78c562131d968b5d3d307a70f25d06c226716..ddd97f1470d3cccd5ce56dae4b2006b823a18b97 100644
--- a/src/MNH/turb_ver.f90
+++ b/src/MNH/turb_ver.f90
@@ -311,6 +311,7 @@ END MODULE MODI_TURB_VER
 !!                     10/2012 (J.Escobar) Bypass PGI bug , redefine some allocatable array inplace of automatic
 !!                     08/2014 (J.Escobar) Bypass PGI memory leak bug , replace IF statement with IF THEN ENDIF
 !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
+!! JL Redelsperger 03/2021 : add Ocean LES case
 !!--------------------------------------------------------------------------
 !       
 !*      0. DECLARATIONS
@@ -318,6 +319,7 @@ END MODULE MODI_TURB_VER
 !
 USE MODD_CST
 USE MODD_CTURB
+USE MODD_DYN_n, ONLY : LOCEAN
 use modd_field,          only: tfielddata, TYPEREAL
 USE MODD_IO,             ONLY: TFILEDATA
 USE MODD_PARAMETERS
@@ -463,9 +465,9 @@ REAL, ALLOCATABLE, DIMENSION(:,:,:)  ::  &
 !!$REAL, DIMENSION(SIZE(PTHLM,1),SIZE(PTHLM,2),SIZE(PTHLM,3),NSV)  ::  &
 REAL, ALLOCATABLE, DIMENSION(:,:,:,:)  ::  &
        ZPSI_SV,  & ! Prandtl number for scalars
-       ZREDS1,   & ! 1D Redeslperger number R_sv
-       ZRED2THS, & ! 3D Redeslperger number R*2_thsv
-       ZRED2RS     ! 3D Redeslperger number R*2_rsv
+       ZREDS1,   & ! 1D Redelsperger number R_sv
+       ZRED2THS, & ! 3D Redelsperger number R*2_thsv
+       ZRED2RS     ! 3D Redelsperger number R*2_rsv
 !
 LOGICAL :: GUSERV    ! flag to use water vapor
 INTEGER :: IKB,IKE   ! index value for the Beginning
@@ -509,7 +511,6 @@ ALLOCATE ( &
 !
 IKB=KKA+JPVEXT_TURB*KKL
 IKE=KKU-JPVEXT_TURB*KKL
-
 !
 !
 ! 3D Redelsperger numbers
@@ -529,7 +530,11 @@ CALL PRANDTL(KKA,KKU,KKL,KRR,KRRI,OTURB_FLX,       &
 !
 ! Buoyancy coefficient
 !
-ZBETA = XG/PTHVREF
+IF (LOCEAN) THEN
+  ZBETA = XG*XALPHAOC
+ELSE
+  ZBETA = XG/PTHVREF
+END IF
 !
 ! Square root of Tke
 !
diff --git a/src/MNH/turb_ver_dyn_flux.f90 b/src/MNH/turb_ver_dyn_flux.f90
index 10a40478b7dd7ba01fc2191d1646c78631448743..7d5983a0408da4bd324bb689a00a25db9ee6c2e7 100644
--- a/src/MNH/turb_ver_dyn_flux.f90
+++ b/src/MNH/turb_ver_dyn_flux.f90
@@ -280,6 +280,7 @@ END MODULE MODI_TURB_VER_DYN_FLUX
 !!      J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 
 !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
 !!      Q. Rodier      17/01/2019 : cleaning : remove cyclic conditions on DP and ZA
+!! JL Redelsperger 03/2021 : Add Ocean  & O-A Autocoupling LES Cases
 !!--------------------------------------------------------------------------
 !       
 !*      0. DECLARATIONS
@@ -288,11 +289,15 @@ END MODULE MODI_TURB_VER_DYN_FLUX
 USE MODD_CONF
 USE MODD_CST
 USE MODD_CTURB
+USE MODD_DYN_n, ONLY : LOCEAN
 use modd_field,          only: tfielddata, TYPEREAL
 USE MODD_IO,             ONLY: TFILEDATA
 USE MODD_LES
 USE MODD_NSV
+USE MODD_OCEANH
 USE MODD_PARAMETERS
+USE MODD_REF, ONLY : LCOUPLES
+USE MODD_TURB_n
 !
 !
 USE MODI_GRADIENT_U
@@ -459,25 +464,48 @@ ZCOEFS(:,:,1)=  ZCOEFFLXU(:,:,1) * PCOSSLOPE(:,:) * PDIRCOSZW(:,:)  &
 ! average this flux to be located at the U,W vorticity point
 ZCOEFS(:,:,1:1)=MXM(ZCOEFS(:,:,1:1) / PDZZ(:,:,IKB:IKB) )
 !
-! compute the explicit tangential flux at the W point
-ZSOURCE(:,:,IKB)     =                                              &
-    PTAU11M(:,:) * PCOSSLOPE(:,:) * PDIRCOSZW(:,:) * ZDIRSINZW(:,:) &
-   -PTAU12M(:,:) * PSINSLOPE(:,:) * ZDIRSINZW(:,:)                  &
-   -PTAU33M(:,:) * PCOSSLOPE(:,:) * ZDIRSINZW(:,:) * PDIRCOSZW(:,:)  
 !
-! add the vertical part or the surface flux at the U,W vorticity point
-
-ZSOURCE(:,:,IKB:IKB) =                                  &
-  (   MXM( ZSOURCE(:,:,IKB:IKB)   / PDZZ(:,:,IKB:IKB) ) &
-   +  MXM( ZCOEFFLXU(:,:,1:1) / PDZZ(:,:,IKB:IKB)       &
+! ZSOURCE= FLUX /DZ
+IF (LOCEAN) THEN  ! OCEAN MODEL ONLY
+  ! Sfx flux assumed to be in SI & at vorticity point
+  IF (LCOUPLES) THEN  
+    ZSOURCE(:,:,IKE:IKE) = XSSUFL_C(:,:,1:1)/PDZZ(:,:,IKE:IKE) &
+         *0.5 * ( 1. + MXM(PRHODJ(:,:,KKU:KKU)) / MXM(PRHODJ(:,:,IKE:IKE))) 
+  ELSE
+    ZSOURCE(:,:,IKE)     = XSSUFL(:,:)
+    ZSOURCE(:,:,IKE:IKE) = ZSOURCE (:,:,IKE:IKE) /PDZZ(:,:,IKE:IKE) &
+        *0.5 * ( 1. + MXM(PRHODJ(:,:,KKU:KKU)) / MXM(PRHODJ(:,:,IKE:IKE)) )
+  ENDIF
+  !No flux at the ocean domain bottom
+   ZSOURCE(:,:,IKB)           = 0.
+   ZSOURCE(:,:,IKTB+1:IKTE-1) = 0
+!
+ELSE             !ATMOS MODEL ONLY
+  IF (LCOUPLES) THEN 
+   ZSOURCE(:,:,IKB:IKB) = XSSUFL_C(:,:,1:1)/PDZZ(:,:,IKB:IKB) &
+      * 0.5 * ( 1. + MXM(PRHODJ(:,:,KKA:KKA)) / MXM(PRHODJ(:,:,IKB:IKB)) )
+  ELSE               
+    ! compute the explicit tangential flux at the W point
+    ZSOURCE(:,:,IKB)     =                                              &
+     PTAU11M(:,:) * PCOSSLOPE(:,:) * PDIRCOSZW(:,:) * ZDIRSINZW(:,:) &
+     -PTAU12M(:,:) * PSINSLOPE(:,:) * ZDIRSINZW(:,:)                  &
+     -PTAU33M(:,:) * PCOSSLOPE(:,:) * ZDIRSINZW(:,:) * PDIRCOSZW(:,:)  
+!
+    ! add the vertical part or the surface flux at the U,W vorticity point
+!
+    ZSOURCE(:,:,IKB:IKB) =                                  &
+    (   MXM( ZSOURCE(:,:,IKB:IKB)   / PDZZ(:,:,IKB:IKB) ) &
+    +  MXM( ZCOEFFLXU(:,:,1:1) / PDZZ(:,:,IKB:IKB)       &
            *ZUSLOPEM(:,:,1:1)                           &
           -ZCOEFFLXV(:,:,1:1) / PDZZ(:,:,IKB:IKB)       &
            *ZVSLOPEM(:,:,1:1)                      )    &
-   -  ZCOEFS(:,:,1:1) * PUM(:,:,IKB:IKB) * PIMPL        &
-  ) * 0.5 * ( 1. + MXM(PRHODJ(:,:,KKA:KKA)) / MXM(PRHODJ(:,:,IKB:IKB)) )
+    -  ZCOEFS(:,:,1:1) * PUM(:,:,IKB:IKB) * PIMPL        &
+    ) * 0.5 * ( 1. + MXM(PRHODJ(:,:,KKA:KKA)) / MXM(PRHODJ(:,:,IKB:IKB)) )
+  ENDIF 
 !
-ZSOURCE(:,:,IKTB+1:IKTE-1) = 0.
-ZSOURCE(:,:,IKE) = 0.
+  ZSOURCE(:,:,IKTB+1:IKTE-1) = 0.
+  ZSOURCE(:,:,IKE) = 0.
+ENDIF !end ocean or atmosphere cases
 !
 ! Obtention of the split U at t+ deltat 
 !
@@ -504,6 +532,12 @@ ZFLXZ(:,:,IKB:IKB)   =   MXM(PDZZ(:,:,IKB:IKB))  *                &
 !
 ZFLXZ(:,:,KKA) = ZFLXZ(:,:,IKB) 
 
+IF (LOCEAN) THEN !ocean model at phys sfc (ocean domain top)
+  ZFLXZ(:,:,IKE:IKE)   =   MXM(PDZZ(:,:,IKE:IKE))  *                &
+                           ZSOURCE(:,:,IKE:IKE)                     &
+                           / 0.5 / ( 1. + MXM(PRHODJ(:,:,KKU:KKU)) / MXM(PRHODJ(:,:,IKE:IKE)) )
+  ZFLXZ(:,:,KKU) = ZFLXZ(:,:,IKE) 
+END IF
 !
 IF ( OTURB_FLX .AND. tpfile%lopened ) THEN
   ! stores the U wind component vertical flux
@@ -533,7 +567,15 @@ PDP(:,:,:) = - MZF( MXF ( ZFLXZ * GZ_U_UW(PUM,PDZZ) )  )
 PDP(:,:,IKB:IKB) = - MXF (                                                      &
   ZFLXZ(:,:,IKB+KKL:IKB+KKL) * (PUM(:,:,IKB+KKL:IKB+KKL)-PUM(:,:,IKB:IKB))  &
                          / MXM(PDZZ(:,:,IKB+KKL:IKB+KKL))                   &
-                         ) 
+                         )
+!
+IF (LOCEAN) THEN
+  ! evaluate the dynamic production at w(IKE-KKL) in PDP(IKE)
+  PDP(:,:,IKE:IKE) = - MXF (                                                      &
+    ZFLXZ(:,:,IKE-KKL:IKE-KKL) * (PUM(:,:,IKE:IKE)-PUM(:,:,IKE-KKL:IKE-KKL))  &
+                           / MXM(PDZZ(:,:,IKE-KKL:IKE-KKL))                   &
+                           ) 
+END IF
 !
 ! Storage in the LES configuration
 ! 
@@ -552,8 +594,12 @@ END IF
 !
 IF(HTURBDIM=='3DIM') THEN
   ! Compute the source for the W wind component
-  ZFLXZ(:,:,KKA) = 2 * ZFLXZ(:,:,IKB) - ZFLXZ(:,:,IKB+KKL) ! extrapolation 
                 ! used to compute the W source at the ground
+  ZFLXZ(:,:,KKA) = 2 * ZFLXZ(:,:,IKB) - ZFLXZ(:,:,IKB+KKL) ! extrapolation 
+ IF (LOCEAN) THEN
+   ZFLXZ(:,:,KKU) = 2 * ZFLXZ(:,:,IKE) - ZFLXZ(:,:,IKE-KKL) ! extrapolation 
+ END IF     
+     
   !
   IF (.NOT. LFLAT) THEN
     PRWS(:,:,:)= PRWS                                      &
@@ -583,6 +629,21 @@ IF(HTURBDIM=='3DIM') THEN
      ) / (0.5*(PDXX(:,:,IKB+KKL:IKB+KKL)+PDXX(:,:,IKB:IKB)))                 &
                           )
   !
+IF (LOCEAN) THEN
+  ! evaluate the dynamic production at w(IKE-KKL) in PDP(IKE)
+  ZA(:,:,IKE:IKE) = - MXF (                                                  &
+   ZFLXZ(:,:,IKE-KKL:IKE-KKL) *                                              &
+     ( DXM( PWM(:,:,IKE-KKL:IKE-KKL) )                                       &
+      -MXM(  (PWM(:,:,IKE-2*KKL:IKE-2*KKL   )-PWM(:,:,IKE-KKL:IKE-KKL))      &
+              /(PDZZ(:,:,IKE-2*KKL:IKE-2*KKL)+PDZZ(:,:,IKE-KKL:IKE-KKL))     &
+            +(PWM(:,:,IKE-KKL:IKE-KKL)-PWM(:,:,IKE:IKE  ))                   &
+              /(PDZZ(:,:,IKE-KKL:IKE-KKL)+PDZZ(:,:,IKE:IKE  ))               &
+          )                                                                  &
+         * PDZX(:,:,IKE-KKL:IKE-KKL)                                          &
+     ) / (0.5*(PDXX(:,:,IKE-KKL:IKE-KKL)+PDXX(:,:,IKE:IKE)))                 &
+                          )
+END IF
+  !
   PDP(:,:,:)=PDP(:,:,:)+ZA(:,:,:)
   !
   ! Storage in the LES configuration
@@ -636,24 +697,44 @@ ZCOEFS(:,:,1)=  ZCOEFFLXU(:,:,1) * PSINSLOPE(:,:) * PDIRCOSZW(:,:)  &
 ! average this flux to be located at the V,W vorticity point
 ZCOEFS(:,:,1:1)=MYM(ZCOEFS(:,:,1:1) / PDZZ(:,:,IKB:IKB) )
 !
-! compute the explicit tangential flux at the W point
-ZSOURCE(:,:,IKB)       =                                                  &
-    PTAU11M(:,:) * PSINSLOPE(:,:) * PDIRCOSZW(:,:) * ZDIRSINZW(:,:)         &
-   +PTAU12M(:,:) * PCOSSLOPE(:,:) * ZDIRSINZW(:,:)                          &
-   -PTAU33M(:,:) * PSINSLOPE(:,:) * ZDIRSINZW(:,:) * PDIRCOSZW(:,:) 
-!
-! add the vertical part or the surface flux at the V,W vorticity point
-ZSOURCE(:,:,IKB:IKB) =                                      &
-  (   MYM( ZSOURCE(:,:,IKB:IKB)   / PDZZ(:,:,IKB:IKB) )     &
-   +  MYM( ZCOEFFLXU(:,:,1:1) / PDZZ(:,:,IKB:IKB)           &
-          *ZUSLOPEM(:,:,1:1)                                &
-          +ZCOEFFLXV(:,:,1:1) / PDZZ(:,:,IKB:IKB)           &
-          *ZVSLOPEM(:,:,1:1)                      )         &
-   - ZCOEFS(:,:,1:1) * PVM(:,:,IKB:IKB) * PIMPL             &
-  ) * 0.5 * ( 1. + MYM(PRHODJ(:,:,KKA:KKA)) / MYM(PRHODJ(:,:,IKB:IKB)) )
-!
+IF (LOCEAN) THEN ! Ocean case
+  IF (LCOUPLES) THEN
+    ZSOURCE(:,:,IKE:IKE) =  XSSVFL_C(:,:,1:1)/PDZZ(:,:,IKE:IKE) &
+        *0.5 * ( 1. + MYM(PRHODJ(:,:,KKU:KKU)) / MYM(PRHODJ(:,:,IKE:IKE)) ) 
+  ELSE 
+    ZSOURCE(:,:,IKE) = XSSVFL(:,:)
+    ZSOURCE(:,:,IKE:IKE) = ZSOURCE(:,:,IKE:IKE)/PDZZ(:,:,IKE:IKE) &
+        *0.5 * ( 1. + MYM(PRHODJ(:,:,KKU:KKU)) / MYM(PRHODJ(:,:,IKE:IKE)) )
+  END IF
+  !No flux at the ocean domain bottom
+  ZSOURCE(:,:,IKB) = 0.
+ELSE ! Atmos case
+  IF (.NOT.LCOUPLES) THEN !  only atmosp sans couplage
+  ! compute the explicit tangential flux at the W point
+    ZSOURCE(:,:,IKB)       =                                                  &
+      PTAU11M(:,:) * PSINSLOPE(:,:) * PDIRCOSZW(:,:) * ZDIRSINZW(:,:)         &
+     +PTAU12M(:,:) * PCOSSLOPE(:,:) * ZDIRSINZW(:,:)                          &
+     -PTAU33M(:,:) * PSINSLOPE(:,:) * ZDIRSINZW(:,:) * PDIRCOSZW(:,:) 
+!
+  ! add the vertical part or the surface flux at the V,W vorticity point
+  ZSOURCE(:,:,IKB:IKB) =                                      &
+    (   MYM( ZSOURCE(:,:,IKB:IKB)   / PDZZ(:,:,IKB:IKB) )     &
+     +  MYM( ZCOEFFLXU(:,:,1:1) / PDZZ(:,:,IKB:IKB)           &
+            *ZUSLOPEM(:,:,1:1)                                &
+            +ZCOEFFLXV(:,:,1:1) / PDZZ(:,:,IKB:IKB)           &
+            *ZVSLOPEM(:,:,1:1)                      )         &
+     - ZCOEFS(:,:,1:1) * PVM(:,:,IKB:IKB) * PIMPL             &
+    ) * 0.5 * ( 1. + MYM(PRHODJ(:,:,KKA:KKA)) / MYM(PRHODJ(:,:,IKB:IKB)) )
+!
+  ELSE   !atmosphere quand couplage   
+    ! flux en input supposé etre en SI et en point de voticité
+    ZSOURCE(:,:,IKB:IKB) =     -XSSVFL_C(:,:,1:1)/(1.*PDZZ(:,:,IKB:IKB)) &
+      * 0.5 * ( 1. + MYM(PRHODJ(:,:,KKA:KKA)) / MYM(PRHODJ(:,:,IKB:IKB)) )
+  ENDIF
+  !No flux at the atmosphere top
+  ZSOURCE(:,:,IKE) = 0.
+ENDIF ! End of Ocean or Atmospher Cases
 ZSOURCE(:,:,IKTB+1:IKTE-1) = 0.
-ZSOURCE(:,:,IKE) = 0.
 ! 
 !  Obtention of the split V at t+ deltat 
 CALL TRIDIAG_WIND(KKA,KKU,KKL,PVM,ZA,ZCOEFS(:,:,1),PTSTEP,PEXPL,PIMPL,  &
@@ -679,6 +760,13 @@ ZFLXZ(:,:,IKB:IKB)   =   MYM(PDZZ(:,:,IKB:IKB))  *                       &
 !
 ZFLXZ(:,:,KKA) = ZFLXZ(:,:,IKB)
 !
+IF (LOCEAN) THEN
+  ZFLXZ(:,:,IKE:IKE)   =   MYM(PDZZ(:,:,IKE:IKE))  *                &
+      ZSOURCE(:,:,IKE:IKE)                                          &
+      / 0.5 / ( 1. + MYM(PRHODJ(:,:,KKU:KKU)) / MYM(PRHODJ(:,:,IKE:IKE)) )
+  ZFLXZ(:,:,KKU) = ZFLXZ(:,:,IKE) 
+END IF
+!
 IF ( OTURB_FLX .AND. tpfile%lopened ) THEN
   ! stores the V wind component vertical flux
   TZFIELD%CMNHNAME   = 'VW_VFLX'
@@ -710,6 +798,14 @@ ZFLXZ(:,:,IKB+KKL:IKB+KKL) * (PVM(:,:,IKB+KKL:IKB+KKL)-PVM(:,:,IKB:IKB))  &
                        / MYM(PDZZ(:,:,IKB+KKL:IKB+KKL))               &
                        )
 !
+IF (LOCEAN) THEN
+  ! evaluate the dynamic production at w(IKE-KKL) in PDP(IKE)
+  ZA(:,:,IKE:IKE) = - MYF (                                                  &
+   ZFLXZ(:,:,IKE-KKL:IKE-KKL) * (PVM(:,:,IKE:IKE)-PVM(:,:,IKE-KKL:IKE-KKL))  &
+                          / MYM(PDZZ(:,:,IKE-KKL:IKE-KKL))                   &
+                          )
+END IF
+!
 PDP(:,:,:)=PDP(:,:,:)+ZA(:,:,:)
 !
 ! Storage in the LES configuration
@@ -729,6 +825,9 @@ END IF
 IF(HTURBDIM=='3DIM') THEN
   ! Compute the source for the W wind component
   ZFLXZ(:,:,KKA) = 2 * ZFLXZ(:,:,IKB) - ZFLXZ(:,:,IKB+KKL) ! extrapolation 
+  IF (LOCEAN) THEN
+    ZFLXZ(:,:,KKU) = 2 * ZFLXZ(:,:,IKE) - ZFLXZ(:,:,IKE-KKL) ! extrapolation 
+  END IF
   !
   IF (.NOT. L2D) THEN 
     IF (.NOT. LFLAT) THEN
@@ -759,6 +858,20 @@ IF(HTURBDIM=='3DIM') THEN
        ) / (0.5*(PDYY(:,:,IKB+KKL:IKB+KKL)+PDYY(:,:,IKB:IKB)))             &
                             )
   !
+    IF (LOCEAN) THEN
+     ZA(:,:,IKE:IKE) = - MYF (                                              &
+      ZFLXZ(:,:,IKE-KKL:IKE-KKL) *                                          &
+        ( DYM( PWM(:,:,IKE-KKL:IKE-KKL) )                                   &
+         -MYM(  (PWM(:,:,IKE-2*KKL:IKE-2*KKL)-PWM(:,:,IKE-KKL:IKE-KKL))     &
+                 /(PDZZ(:,:,IKE-2*KKL:IKE-2*KKL)+PDZZ(:,:,IKE-KKL:IKE-KKL)) &
+               +(PWM(:,:,IKE-KKL:IKE-KKL)-PWM(:,:,IKE:IKE  ))               &
+                 /(PDZZ(:,:,IKE-KKL:IKE-KKL)+PDZZ(:,:,IKE:IKE  ))           &
+             )                                                              &
+           * PDZY(:,:,IKE-KKL:IKE-KKL)                                      &
+        ) / (0.5*(PDYY(:,:,IKE-KKL:IKE-KKL)+PDYY(:,:,IKE:IKE)))             &
+                            )
+    END IF
+!    
     PDP(:,:,:)=PDP(:,:,:)+ZA(:,:,:)
   !
   END IF
diff --git a/src/MNH/turb_ver_thermo_flux.f90 b/src/MNH/turb_ver_thermo_flux.f90
index 22fdeae7c5a21016639ef91217ece653545fba23..c9187c7190a8d8b72c779a14015db3a4b195c35b 100644
--- a/src/MNH/turb_ver_thermo_flux.f90
+++ b/src/MNH/turb_ver_thermo_flux.f90
@@ -323,11 +323,13 @@ END MODULE MODI_TURB_VER_THERMO_FLUX
 !!                     2012-02 (Y. Seity) add possibility to run with reversed
 !!                                             vertical levels
 !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
-!!                     2018 (D. Ricard) last version of HGRAD turbulence scheme
+!!                     2021 (D. Ricard) last version of HGRAD turbulence scheme
 !!                                 Leronard terms instead of Reynolds terms
 !!                                 applied to vertical fluxes of r_np and Thl
 !!                                 for implicit version of turbulence scheme
 !!                                 corrections and cleaning
+!! JL Redelsperger  : 03/2021: Ocean and Autocoupling O-A LES Cases
+!!                             Sfc flux shape for LDEEPOC Case
 !!--------------------------------------------------------------------------
 !       
 !*      0. DECLARATIONS
@@ -336,13 +338,19 @@ END MODULE MODI_TURB_VER_THERMO_FLUX
 USE MODD_CST
 USE MODD_CTURB
 use modd_field,          only: tfielddata, TYPEREAL
-USE MODD_GRID_n, ONLY: XZS, XXHAT
+USE MODD_GRID_n, ONLY: XZS, XXHAT, XYHAT
 USE MODD_IO,             ONLY: TFILEDATA
 USE MODD_METRICS_n
 USE MODD_PARAMETERS
 USE MODD_TURB_n, ONLY: LHGRAD, XCOEFHGRADTHL, XCOEFHGRADRM, XALTHGRAD, XCLDTHOLD
 USE MODD_CONF
 USE MODD_LES
+USE MODD_DIM_n
+USE MODD_DYN_n, ONLY : LOCEAN
+USE MODD_OCEANH
+USE MODD_REF, ONLY : LCOUPLES
+USE MODD_TURB_n
+USE MODD_FRC
 !
 USE MODI_GRADIENT_U
 USE MODI_GRADIENT_V
@@ -362,6 +370,8 @@ USE MODE_IO_FIELD_WRITE, only: IO_Field_write
 USE MODE_PRANDTL
 !
 USE MODI_SECOND_MNH
+USE MODE_ll
+USE MODE_GATHER_ll
 !
 IMPLICIT NONE
 !
@@ -475,10 +485,35 @@ INTEGER             :: IKB,IKE      ! I index values for the Beginning and End
                                     ! mass points of the domain in the 3 direct.
 INTEGER             :: IKT          ! array size in k direction
 INTEGER             :: IKTB,IKTE    ! start, end of k loops in physical domain 
+INTEGER             :: JI, JJ ! loop indexes 
+!
+!
+INTEGER                    :: IIB,IJB       ! Lower bounds of the physical
+                                            ! sub-domain in x and y directions
+INTEGER                    :: IIE,IJE       ! Upper bounds of the physical
+                                            ! sub-domain in x and y directions
+!
+REAL, DIMENSION(:), ALLOCATABLE   :: ZXHAT_ll    !  Position x in the conformal
+                                                 ! plane (array on the complete domain)
+REAL, DIMENSION(:), ALLOCATABLE   :: ZYHAT_ll    !   Position y in the conformal
+                                                 ! plane (array on the complete domain)
+!
+!
+CHARACTER (LEN=100) :: YCOMMENT     ! comment string in LFIFM file
+CHARACTER (LEN=LEN_HREC)  :: YRECFM       ! Name of the desired field in LFIFM file
 !
 REAL :: ZTIME1, ZTIME2
 REAL :: ZDELTAX
-!
+REAL    :: ZXBEG,ZXEND,ZYBEG,ZYEND ! Forcing size for ocean deep convection
+REAL, DIMENSION(SIZE(XXHAT),SIZE(XYHAT)) :: ZDIST ! distance
+                                   ! from the center of the cooling               
+REAL :: ZFLPROV
+INTEGER           :: JKM          ! vertical index loop
+INTEGER          :: JSW
+REAL :: ZSWA     ! index for time flux interpolation
+!
+INTEGER :: IIU, IJU
+INTEGER :: IRESP
 INTEGER :: JK
 LOGICAL :: GUSERV   ! flag to use water
 LOGICAL :: GFTH2    ! flag to use w'th'2
@@ -491,6 +526,36 @@ TYPE(TFIELDDATA) :: TZFIELD
 !
 !*       1.   PRELIMINARIES
 !             -------------
+! Size for a given proc & a given model      
+IIU=SIZE(PTHLM,1) 
+IJU=SIZE(PTHLM,2)
+!
+!! Compute Shape of sfc flux for Oceanic Deep Conv Case
+! 
+IF (LOCEAN .AND. LDEEPOC) THEN
+  !*       COMPUTES THE PHYSICAL SUBDOMAIN BOUNDS
+  ALLOCATE(ZXHAT_ll(NIMAX_ll+2*JPHEXT),ZYHAT_ll(NJMAX_ll+2*JPHEXT))
+  !compute ZXHAT_ll = position in the (0:Lx) domain 1 (Lx=Size of domain1 )
+  !compute XXHAT_ll = position in the (L0_subproc,Lx_subproc) domain for the current subproc
+  !                                     L0_subproc as referenced in the full domain 1
+  CALL GATHERALL_FIELD_ll('XX',XXHAT,ZXHAT_ll,IRESP)
+  CALL GATHERALL_FIELD_ll('YY',XYHAT,ZYHAT_ll,IRESP)
+  CALL GET_DIM_EXT_ll('B',IIU,IJU)
+  CALL GET_INDICE_ll(IIB,IJB,IIE,IJE)
+  DO JJ = IJB,IJE
+    DO JI = IIB,IIE
+      ZDIST(JI,JJ) = SQRT(                         &
+      (( (XXHAT(JI)+XXHAT(JI+1))*0.5 - XCENTX_OC ) / XRADX_OC)**2 + &
+      (( (XYHAT(JJ)+XYHAT(JJ+1))*0.5 - XCENTY_OC ) / XRADY_OC)**2   &
+                                )
+    END DO
+  END DO
+  DO JJ=IJB,IJE
+    DO JI=IIB,IIE
+      IF ( ZDIST(JI,JJ) > 1.) XSSTFL(JI,JJ)=0.
+    END DO
+  END DO
+END IF !END DEEP OCEAN CONV CASE
 !
 IKT  =SIZE(PTHLM,3)  
 IKTE =IKT-JPVEXT_TURB  
@@ -544,7 +609,6 @@ END IF
 !
 ZF      (:,:,:) = -XCSHF*PPHI3*ZKEFF*DZM(PTHLM)/PDZZ
 ZDFDDTDZ(:,:,:) = -XCSHF*ZKEFF*D_PHI3DTDZ_O_DDTDZ(PPHI3,PREDTH1,PREDR1,PRED2TH3,PRED2THR3,HTURBDIM,GUSERV)
-
 !
 IF (LHGRAD) THEN
  ! Compute the Leonard terms for thl
@@ -601,21 +665,38 @@ IF (GFTHR) THEN
   ZDFDDTDZ = ZDFDDTDZ + D_M3_WTH_WTHR_O_DDTDZ(Z3RDMOMENT,PREDTH1,&
     & PREDR1,PD,PBLL_O_E,PETHETA) * MZM(PFTHR)
 END IF
+! compute interface flux
+IF (LCOUPLES) THEN   ! Autocoupling O-A LES
+  IF (LOCEAN) THEN    ! ocean model in coupled case 
+    ZF(:,:,IKE) =  (XSSTFL_C(:,:,1)+XSSRFL_C(:,:,1)) &
+                  *0.5* ( 1. + PRHODJ(:,:,KKU)/PRHODJ(:,:,IKE) )
+  ELSE                ! atmosph model in coupled case
+    ZF(:,:,IKB) =  XSSTFL_C(:,:,1) &
+                  *0.5* ( 1. + PRHODJ(:,:,KKA)/PRHODJ(:,:,IKB) )
+  ENDIF 
+!
+ELSE  ! No coupling O and A cases
+  ! atmosp bottom
+  !*In 3D, a part of the flux goes vertically,
+  ! and another goes horizontally (in presence of slopes)
+  !*In 1D, part of energy released in horizontal flux is taken into account in the vertical part
+  IF (HTURBDIM=='3DIM') THEN
+    ZF(:,:,IKB) = ( PIMPL*PSFTHP(:,:) + PEXPL*PSFTHM(:,:) )   &
+                       * PDIRCOSZW(:,:)                       &
+                       * 0.5 * (1. + PRHODJ(:,:,KKA) / PRHODJ(:,:,IKB))
+  ELSE
+    ZF(:,:,IKB) = ( PIMPL*PSFTHP(:,:) + PEXPL*PSFTHM(:,:) )   &
+                       / PDIRCOSZW(:,:)                       &
+                       * 0.5 * (1. + PRHODJ(:,:,KKA) / PRHODJ(:,:,IKB))
+  END IF
 !
-!* in 3DIM case, a part of the flux goes vertically, and another goes horizontally
-! (in presence of slopes)
-!* in 1DIM case, the part of energy released in horizontal flux
-! is taken into account in the vertical part
-!
-IF (HTURBDIM=='3DIM') THEN
-  ZF(:,:,IKB) = ( PIMPL*PSFTHP(:,:) + PEXPL*PSFTHM(:,:) )   &
-                     * PDIRCOSZW(:,:)                       &
-                     * 0.5 * (1. + PRHODJ(:,:,KKA) / PRHODJ(:,:,IKB))
-ELSE
-  ZF(:,:,IKB) = ( PIMPL*PSFTHP(:,:) + PEXPL*PSFTHM(:,:) )   &
-                     / PDIRCOSZW(:,:)                       &
-                     * 0.5 * (1. + PRHODJ(:,:,KKA) / PRHODJ(:,:,IKB))
-END IF
+  IF (LOCEAN) THEN
+    ZF(:,:,IKE) = XSSTFL(:,:) *0.5*(1. + PRHODJ(:,:,KKU) / PRHODJ(:,:,IKE))
+  ELSE !end ocean case (in nocoupled case)
+    ! atmos top
+    ZF(:,:,IKE)=0.
+  END IF
+END IF !end no coupled cases
 !
 ! Compute the split conservative potential temperature at t+deltat
 CALL TRIDIAG_THERMO(KKA,KKU,KKL,PTHLM,ZF,ZDFDDTDZ,PTSTEP,PIMPL,PDZZ,&
@@ -650,15 +731,25 @@ IF (LHGRAD) THEN
 END IF
 !
 ZFLXZ(:,:,KKA) = ZFLXZ(:,:,IKB) 
+IF (LOCEAN) THEN
+  ZFLXZ(:,:,KKU) = ZFLXZ(:,:,IKE)
+END IF
 !  
-  DO JK=IKTB+1,IKTE-1
-   PWTH(:,:,JK)=0.5*(ZFLXZ(:,:,JK)+ZFLXZ(:,:,JK+KKL))
-  END DO
-  PWTH(:,:,IKB)=0.5*(ZFLXZ(:,:,IKB)+ZFLXZ(:,:,IKB+KKL))
-  PWTH(:,:,KKA)=0.5*(ZFLXZ(:,:,KKA)+ZFLXZ(:,:,KKA+KKL))
+DO JK=IKTB+1,IKTE-1
+  PWTH(:,:,JK)=0.5*(ZFLXZ(:,:,JK)+ZFLXZ(:,:,JK+KKL))
+END DO
+!
+PWTH(:,:,IKB)=0.5*(ZFLXZ(:,:,IKB)+ZFLXZ(:,:,IKB+KKL)) 
+!
+IF (LOCEAN) THEN
+  PWTH(:,:,IKE)=0.5*(ZFLXZ(:,:,IKE)+ZFLXZ(:,:,IKE+KKL))
+  PWTH(:,:,KKA)=0. 
+  PWTH(:,:,KKU)=ZFLXZ(:,:,KKU)
+ELSE
   PWTH(:,:,IKE)=PWTH(:,:,IKE-KKL)
-
-
+  PWTH(:,:,KKA)=0.5*(ZFLXZ(:,:,KKA)+ZFLXZ(:,:,KKA+KKL))
+END IF
+!
 IF ( OTURB_FLX .AND. tpfile%lopened ) THEN
   ! stores the conservative potential temperature vertical flux
   TZFIELD%CMNHNAME   = 'THW_FLX'
@@ -675,19 +766,27 @@ IF ( OTURB_FLX .AND. tpfile%lopened ) THEN
 END IF
 !
 ! Contribution of the conservative temperature flux to the buoyancy flux
-IF (KRR /= 0) THEN
-  PTP(:,:,:)  =  PBETA * MZF( MZM(PETHETA) * ZFLXZ )
-  PTP(:,:,IKB)=  PBETA(:,:,IKB) * PETHETA(:,:,IKB) *   &
-                 0.5 * ( ZFLXZ (:,:,IKB) + ZFLXZ (:,:,IKB+KKL) )  
+IF (LOCEAN) THEN
+  PTP(:,:,:)= XG*XALPHAOC * MZF(ZFLXZ )
 ELSE
-  PTP(:,:,:)=  PBETA * MZF( ZFLXZ )
-END IF
+  IF (KRR /= 0) THEN
+    PTP(:,:,:)  =  PBETA * MZF( MZM(PETHETA) * ZFLXZ )
+    PTP(:,:,IKB)=  PBETA(:,:,IKB) * PETHETA(:,:,IKB) *   &
+                   0.5 * ( ZFLXZ (:,:,IKB) + ZFLXZ (:,:,IKB+KKL) )
+  ELSE
+    PTP(:,:,:)=  PBETA * MZF( ZFLXZ )
+  END IF
+END IF 
 !
 ! Buoyancy flux at flux points
 ! 
 PWTHV = MZM(PETHETA) * ZFLXZ
 PWTHV(:,:,IKB) = PETHETA(:,:,IKB) * ZFLXZ(:,:,IKB)
 !
+IF (LOCEAN) THEN
+  ! temperature contribution to Buy flux     
+  PWTHV(:,:,IKE) = PETHETA(:,:,IKE) * ZFLXZ(:,:,IKE)
+END IF
 !*       2.3  Partial vertical divergence of the < Rc w > flux
 !
 IF ( KRRL >= 1 ) THEN
@@ -807,21 +906,42 @@ IF (KRR /= 0) THEN
      & PREDTH1,PD,PBLL_O_E,PEMOIST) * MZM(PFTHR)
   END IF
   !
-  !* in 3DIM case, a part of the flux goes vertically, and another goes horizontally
-  ! (in presence of slopes)
-  !* in 1DIM case, the part of energy released in horizontal flux
-  ! is taken into account in the vertical part
-  !
-  IF (HTURBDIM=='3DIM') THEN
-    ZF(:,:,IKB) = ( PIMPL*PSFRP(:,:) + PEXPL*PSFRM(:,:) )       &
-                         * PDIRCOSZW(:,:)                       &
-                       * 0.5 * (1. + PRHODJ(:,:,KKA) / PRHODJ(:,:,IKB))
-  ELSE
-    ZF(:,:,IKB) = ( PIMPL*PSFRP(:,:) + PEXPL*PSFRM(:,:) )     &
-                       / PDIRCOSZW(:,:)                       &
-                       * 0.5 * (1. + PRHODJ(:,:,KKA) / PRHODJ(:,:,IKB))
-  END IF
+  ! compute interface flux
+  IF (LCOUPLES) THEN   ! coupling NH O-A
+    IF (LOCEAN) THEN    ! ocean model in coupled case
+      ! evap effect on salinity to be added later !!!
+      ZF(:,:,IKE) =  0.
+    ELSE                ! atmosph model in coupled case
+      ZF(:,:,IKB) =  0.
+      ! AJOUTER FLUX EVAP SUR MODELE ATMOS
+    ENDIF
   !
+  ELSE  ! No coupling NH OA case
+    ! atmosp bottom
+    !* in 3DIM case, a part of the flux goes vertically, and another goes horizontally
+    ! (in presence of slopes)
+    !* in 1DIM case, the part of energy released in horizontal flux
+    ! is taken into account in the vertical part
+    !
+    IF (HTURBDIM=='3DIM') THEN
+      ZF(:,:,IKB) = ( PIMPL*PSFRP(:,:) + PEXPL*PSFRM(:,:) )       &
+                           * PDIRCOSZW(:,:)                       &
+                         * 0.5 * (1. + PRHODJ(:,:,KKA) / PRHODJ(:,:,IKB))
+    ELSE
+      ZF(:,:,IKB) = ( PIMPL*PSFRP(:,:) + PEXPL*PSFRM(:,:) )     &
+                         / PDIRCOSZW(:,:)                       &
+                         * 0.5 * (1. + PRHODJ(:,:,KKA) / PRHODJ(:,:,IKB))
+    END IF
+    !
+    IF (LOCEAN) THEN
+      ! General ocean case
+      ! salinity/evap effect to be added later !!!!!
+      ZF(:,:,IKE) = 0.
+    ELSE !end ocean case (in nocoupled case)
+      ! atmos top
+     ZF(:,:,IKE)=0.
+    END IF
+  END IF!end no coupled cases
   ! Compute the split conservative potential temperature at t+deltat
   CALL TRIDIAG_THERMO(KKA,KKU,KKL,PRM(:,:,:,1),ZF,ZDFDDRDZ,PTSTEP,PIMPL,&
                       PDZZ,PRHODJ,PRP)
@@ -882,15 +1002,22 @@ IF (KRR /= 0) THEN
   END IF
   !
   ! Contribution of the conservative water flux to the Buoyancy flux
-  ZA(:,:,:)   =  PBETA * MZF( MZM(PEMOIST) * ZFLXZ )
-  ZA(:,:,IKB) =  PBETA(:,:,IKB) * PEMOIST(:,:,IKB) *   &
-                 0.5 * ( ZFLXZ (:,:,IKB) + ZFLXZ (:,:,IKB+KKL) )
-  PTP(:,:,:) = PTP(:,:,:) + ZA(:,:,:)
+  IF (LOCEAN) THEN
+     ZA(:,:,:)=  -XG*XBETAOC  * MZF(ZFLXZ )
+  ELSE
+    ZA(:,:,:)   =  PBETA * MZF( MZM(PEMOIST) * ZFLXZ )
+    ZA(:,:,IKB) =  PBETA(:,:,IKB) * PEMOIST(:,:,IKB) *   &
+                   0.5 * ( ZFLXZ (:,:,IKB) + ZFLXZ (:,:,IKB+KKL) )
+    PTP(:,:,:) = PTP(:,:,:) + ZA(:,:,:)
+  END IF
   !
   ! Buoyancy flux at flux points
   ! 
   PWTHV          = PWTHV          + MZM(PEMOIST) * ZFLXZ
   PWTHV(:,:,IKB) = PWTHV(:,:,IKB) + PEMOIST(:,:,IKB) * ZFLXZ(:,:,IKB)
+  IF (LOCEAN) THEN
+    PWTHV(:,:,IKE) = PWTHV(:,:,IKE) + PEMOIST(:,:,IKE)* ZFLXZ(:,:,IKE)
+  END IF   
 !
 !*       3.3  Complete vertical divergence of the < Rc w > flux
 !
@@ -973,6 +1100,9 @@ IF ( ((OTURB_FLX .AND. tpfile%lopened) .OR. LLES_CALL) .AND. (KRRL > 0) ) THEN
   END IF
 !
 END IF !end of <w Rc>
+IF (LOCEAN.AND.LDEEPOC) THEN
+  DEALLOCATE(ZXHAT_ll,ZYHAT_ll)
+END IF
 !
 !----------------------------------------------------------------------------
 END SUBROUTINE TURB_VER_THERMO_FLUX
diff --git a/src/MNH/ver_int_thermo.f90 b/src/MNH/ver_int_thermo.f90
index 1d3424a943e422cf37b2ec52dd4651470c25a108..7ec9f531dfe76f77385a65aded9d65e877339198 100644
--- a/src/MNH/ver_int_thermo.f90
+++ b/src/MNH/ver_int_thermo.f90
@@ -136,6 +136,7 @@ END MODULE MODI_VER_INT_THERMO
 !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
 !  P. Wautelet 22/02/2019: replace Hollerith edit descriptor (deleted from Fortran 95 standard)
 !  P. Wautelet 20/05/2019: add name argument to ADDnFIELD_ll + new ADD4DFIELD_ll subroutine
+!!  Jean-Luc Redelsperger 03/2021  OCEAN LES case 
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
@@ -145,6 +146,7 @@ USE MODD_ARGSLIST_ll, ONLY: LIST_ll
 USE MODD_CONF
 USE MODD_CONF_n
 USE MODD_CST
+USE MODD_DYN_n, ONLY : LOCEAN
 USE MODD_GRID_n
 USE MODD_IO,          ONLY: TFILEDATA
 USE MODD_LUNIT,       ONLY: TLUOUT0
@@ -343,38 +345,42 @@ CALL MPPDB_CHECK3D(ZPMHPOHP_SH,"ver_int_thermo2a::ZPMHPOHP_SH",PRECISION)
 !*       3.1   Computation of the shift profile
 !              --------------------------------
 !
-ZTHVCLIMGR=3.5E-3 ! K/m
-CALL FREE_ATM_PROFILE(TPFILE,PTHV_MX,PZMASS_MX,PZS_LS,PZSMT_LS,ZTHVCLIMGR,ZTHV_FREE,ZZ_FREE)
-CALL MPPDB_CHECK3D(ZTHV_FREE,"VER_INT_THERMO:ZTHV_FREE",PRECISION)
+IF (LOCEAN) THEN
+  ZTHV_SH(:,:,:) = PTHV_MX(:,:,:)
+ELSE
+  ZTHVCLIMGR=3.5E-3 ! K/m
+  CALL FREE_ATM_PROFILE(TPFILE,PTHV_MX,PZMASS_MX,PZS_LS,PZSMT_LS,ZTHVCLIMGR,ZTHV_FREE,ZZ_FREE)
+  CALL MPPDB_CHECK3D(ZTHV_FREE,"VER_INT_THERMO:ZTHV_FREE",PRECISION)
 !
 !*       3.2   Computation of the value of thetav on the shifted grid
 !              ------------------------------------------------------
 !
-CALL COEF_VER_INTERP_LIN(ZZ_FREE(:,:,:),PZMASS_MX(:,:,:))
-ZTHV_FREE_MX(:,:,:)=VER_INTERP_LIN(ZTHV_FREE(:,:,:),NKLIN(:,:,:),XCOEFLIN(:,:,:))
-CALL MPPDB_CHECK3D(ZTHV_FREE_MX,"VER_INT_THERMO:ZTHV_FREE_MX",PRECISION)
+  CALL COEF_VER_INTERP_LIN(ZZ_FREE(:,:,:),PZMASS_MX(:,:,:))
+  ZTHV_FREE_MX(:,:,:)=VER_INTERP_LIN(ZTHV_FREE(:,:,:),NKLIN(:,:,:),XCOEFLIN(:,:,:))
+  CALL MPPDB_CHECK3D(ZTHV_FREE_MX,"VER_INT_THERMO:ZTHV_FREE_MX",PRECISION)
 !
-!20131113 add update_halo here
-CALL MPPDB_CHECK3D(ZTHV_FREE_MX,"ver_int_thermo3a::ZTHV_FREE_MX",PRECISION)
-CALL ADD3DFIELD_ll( TZFIELDS_ll, ZTHV_FREE_MX, 'VER_INT_THERMO::ZTHV_FREE_MX' )
-   CALL UPDATE_HALO_ll(TZFIELDS_ll,IINFO_ll)
-      CALL CLEANLIST_ll(TZFIELDS_ll) 
-!20131112 check3d
-CALL MPPDB_CHECK3D(ZTHV_FREE_MX,"ver_int_thermo2a::ZTHV_FREE_MX",PRECISION)
+  !20131113 add update_halo here
+  CALL MPPDB_CHECK3D(ZTHV_FREE_MX,"ver_int_thermo3a::ZTHV_FREE_MX",PRECISION)
+  CALL ADD3DFIELD_ll( TZFIELDS_ll, ZTHV_FREE_MX, 'VER_INT_THERMO::ZTHV_FREE_MX' )
+  CALL UPDATE_HALO_ll(TZFIELDS_ll,IINFO_ll)
+  CALL CLEANLIST_ll(TZFIELDS_ll) 
+  !20131112 check3d
+  CALL MPPDB_CHECK3D(ZTHV_FREE_MX,"ver_int_thermo2a::ZTHV_FREE_MX",PRECISION)
 !
-CALL COEF_VER_INTERP_LIN(ZZ_FREE(:,:,:),ZZMASS_SH(:,:,:))
-ZTHV_FREE_SH(:,:,:)=VER_INTERP_LIN(ZTHV_FREE(:,:,:),NKLIN(:,:,:),XCOEFLIN(:,:,:))
-CALL MPPDB_CHECK3D(ZTHV_FREE_SH,"VER_INT_THERMO:ZTHV_FREE_SH",PRECISION)
+  CALL COEF_VER_INTERP_LIN(ZZ_FREE(:,:,:),ZZMASS_SH(:,:,:))
+  ZTHV_FREE_SH(:,:,:)=VER_INTERP_LIN(ZTHV_FREE(:,:,:),NKLIN(:,:,:),XCOEFLIN(:,:,:))
+  CALL MPPDB_CHECK3D(ZTHV_FREE_SH,"VER_INT_THERMO:ZTHV_FREE_SH",PRECISION)
 !
-!20131113 add update_halo here
-CALL MPPDB_CHECK3D(ZTHV_FREE_SH,"ver_int_thermo3a::ZTHV_FREE_SH",PRECISION)
-CALL ADD3DFIELD_ll( TZFIELDS_ll, ZTHV_FREE_SH, 'VER_INT_THERMO::ZTHV_FREE_SH' )
-   CALL UPDATE_HALO_ll(TZFIELDS_ll,IINFO_ll)
-      CALL CLEANLIST_ll(TZFIELDS_ll)
-!20131112 check3d
-CALL MPPDB_CHECK3D(ZTHV_FREE_SH,"ver_int_thermo2a::ZTHV_FREE_SH",PRECISION)
-!
-ZTHV_SH(:,:,:) = PTHV_MX(:,:,:) - ZTHV_FREE_MX(:,:,:) + ZTHV_FREE_SH(:,:,:)
+  !20131113 add update_halo here
+  CALL MPPDB_CHECK3D(ZTHV_FREE_SH,"ver_int_thermo3a::ZTHV_FREE_SH",PRECISION)
+  CALL ADD3DFIELD_ll( TZFIELDS_ll, ZTHV_FREE_SH, 'VER_INT_THERMO::ZTHV_FREE_SH' )
+  CALL UPDATE_HALO_ll(TZFIELDS_ll,IINFO_ll)
+  CALL CLEANLIST_ll(TZFIELDS_ll)
+  !20131112 check3d
+  CALL MPPDB_CHECK3D(ZTHV_FREE_SH,"ver_int_thermo2a::ZTHV_FREE_SH",PRECISION)
+!
+  ZTHV_SH(:,:,:) = PTHV_MX(:,:,:) - ZTHV_FREE_MX(:,:,:) + ZTHV_FREE_SH(:,:,:)
+END IF
 !
 !20131113 add update_halo here
 CALL MPPDB_CHECK3D(ZTHV_SH,"ver_int_thermo3a::ZTHV_SH",PRECISION)
@@ -393,29 +399,37 @@ CALL MPPDB_CHECK3D(ZTHV_SH,"ver_int_thermo2a::ZTHV_SH",PRECISION)
 !*       4.1   Computation of relative humidity on the mixed grid
 !              --------------------------------------------------
 !
-ZRV_MX(:,:,:)=MAX(PR_MX(:,:,:,1),1.E-10)
-ZTH_MX(:,:,:)=PTHV_MX(:,:,:)*(1.+WATER_SUM(PR_MX(:,:,:,:)))/(1.+XRV/XRD*ZRV_MX(:,:,:))
-!
-!20131113 add update_halo here
-CALL MPPDB_CHECK3D(ZTH_MX,"ver_int_thermo4a::ZTH_MX",PRECISION)
-CALL ADD3DFIELD_ll( TZFIELDS_ll, ZTH_MX, 'VER_INT_THERMO::ZTH_MX' )
-   CALL UPDATE_HALO_ll(TZFIELDS_ll,IINFO_ll)
-      CALL CLEANLIST_ll(TZFIELDS_ll)
-!20131112 check3d
-CALL MPPDB_CHECK3D(ZTH_MX,"ver_int_thermo4b::ZTH_MX",PRECISION)
+IF (LOCEAN) THEN
+  ZRV_MX(:,:,:) = PR_MX(:,:,:,1)
+  ZTH_MX(:,:,:) = PTHV_MX(:,:,:)
+  ZT_MX(:,:,:)  = ZTH_MX(:,:,:)
+  ZES_MX(:,:,:) = SM_FOES(ZT_MX(:,:,:))
+  ZHU_MX(:,:,:) = 1.E-10
+ELSE
+  ZRV_MX(:,:,:)=MAX(PR_MX(:,:,:,1),1.E-10)
+  ZTH_MX(:,:,:)=PTHV_MX(:,:,:)*(1.+WATER_SUM(PR_MX(:,:,:,:)))/(1.+XRV/XRD*ZRV_MX(:,:,:))
 !
-ZT_MX(:,:,:)=ZTH_MX(:,:,:)*ZEXNMASS_MX(:,:,:)
+  !20131113 add update_halo here
+  CALL MPPDB_CHECK3D(ZTH_MX,"ver_int_thermo4a::ZTH_MX",PRECISION)
+  CALL ADD3DFIELD_ll( TZFIELDS_ll, ZTH_MX, 'VER_INT_THERMO::ZTH_MX' )
+  CALL UPDATE_HALO_ll(TZFIELDS_ll,IINFO_ll)
+  CALL CLEANLIST_ll(TZFIELDS_ll)
+  !20131112 check3d
+  CALL MPPDB_CHECK3D(ZTH_MX,"ver_int_thermo4b::ZTH_MX",PRECISION)
 !
-!20131113 add update_halo here
-CALL MPPDB_CHECK3D(ZT_MX,"ver_int_thermo4a::ZT_MX",PRECISION)
-CALL ADD3DFIELD_ll( TZFIELDS_ll, ZT_MX, 'VER_INT_THERMO::ZT_MX' )
-   CALL UPDATE_HALO_ll(TZFIELDS_ll,IINFO_ll)
-      CALL CLEANLIST_ll(TZFIELDS_ll)
-!20131112 check3d
-CALL MPPDB_CHECK3D(ZT_MX,"ver_int_thermo4b::ZT_MX",PRECISION)
+  ZT_MX(:,:,:)=ZTH_MX(:,:,:)*ZEXNMASS_MX(:,:,:)
 !
-ZES_MX(:,:,:)=SM_FOES(ZT_MX(:,:,:))
-ZHU_MX(:,:,:)=100.*ZP_MX(:,:,:)/(XRD/XRV/ZRV_MX(:,:,:)+1.)/ZES_MX(:,:,:)
+  !20131113 add update_halo here
+  CALL MPPDB_CHECK3D(ZT_MX,"ver_int_thermo4a::ZT_MX",PRECISION)
+  CALL ADD3DFIELD_ll( TZFIELDS_ll, ZT_MX, 'VER_INT_THERMO::ZT_MX' )
+  CALL UPDATE_HALO_ll(TZFIELDS_ll,IINFO_ll)
+  CALL CLEANLIST_ll(TZFIELDS_ll)
+  !20131112 check3d
+  CALL MPPDB_CHECK3D(ZT_MX,"ver_int_thermo4b::ZT_MX",PRECISION)
+!
+  ZES_MX(:,:,:)=SM_FOES(ZT_MX(:,:,:))
+  ZHU_MX(:,:,:)=100.*ZP_MX(:,:,:)/(XRD/XRV/ZRV_MX(:,:,:)+1.)/ZES_MX(:,:,:)
+END IF
 !
 !20131113 add update_halo here
 CALL MPPDB_CHECK3D(ZHU_MX,"ver_int_thermo4a::ZHU_MX",PRECISION)
@@ -549,17 +563,22 @@ END DO
 CALL COMPUTE_EXNER_FROM_TOP(PTHV,XZZ,PEXNTOP2D,ZHEXN,ZHEXNMASS)
 ZP(:,:,:) = PPMHP(:,:,:) + XP00 * ZHEXNMASS(:,:,:) ** (XCPD/XRD)
 !
-!20131113 add update_halo here
-!CALL MPPDB_CHECK3D(ZP,"ver_int_thermo6a::ZP",PRECISION)
-CALL ADD3DFIELD_ll( TZFIELDS_ll, ZP, 'VER_INT_THERMO::ZP' )
-CALL UPDATE_HALO_ll(TZFIELDS_ll,IINFO_ll)
-CALL CLEANLIST_ll(TZFIELDS_ll)
-!20131112 check3d
-CALL MPPDB_CHECK3D(ZP,"ver_int_thermo6b::ZP",PRECISION)
-!
-PR(:,:,:,1)=SM_PMR_HU(ZP(:,:,:),                                &
-                      PTHV(:,:,:)*(ZP(:,:,:)/XP00)**(XRD/XCPD), &
-                      ZHU(:,:,:),PR(:,:,:,:),KITERMAX=100)
+IF (LOCEAN) THEN
+  !no interpolation for salinity
+  PR(:,:,:,1)=PR_MX(:,:,:,1)
+ELSE
+  !20131113 add update_halo here
+  !CALL MPPDB_CHECK3D(ZP,"ver_int_thermo6a::ZP",PRECISION)
+  CALL ADD3DFIELD_ll( TZFIELDS_ll, ZP, 'VER_INT_THERMO::ZP' )
+  CALL UPDATE_HALO_ll(TZFIELDS_ll,IINFO_ll)
+  CALL CLEANLIST_ll(TZFIELDS_ll)
+  !20131112 check3d
+  CALL MPPDB_CHECK3D(ZP,"ver_int_thermo6b::ZP",PRECISION)
+!
+  PR(:,:,:,1)=SM_PMR_HU(ZP(:,:,:),                                &
+                        PTHV(:,:,:)*(ZP(:,:,:)/XP00)**(XRD/XCPD), &
+                        ZHU(:,:,:),PR(:,:,:,:),KITERMAX=100)
+END IF
 CALL ADD3DFIELD_ll( TZFIELDS_ll, PR(:,:,:,1), 'VER_INT_THERMO::PR(:,:,:,1)' )
 CALL UPDATE_HALO_ll(TZFIELDS_ll,IINFO_ll)
 CALL CLEANLIST_ll(TZFIELDS_ll)
diff --git a/src/MNH/write_les_budgetn.f90 b/src/MNH/write_les_budgetn.f90
index da600ed6365bedd7889cd09f4a9bfebe804ddafd..a27560c73f1df8c904ef9c7a4d906a321c54f962 100644
--- a/src/MNH/write_les_budgetn.f90
+++ b/src/MNH/write_les_budgetn.f90
@@ -45,13 +45,15 @@ subroutine  Write_les_budget_n( tpdiafile )
 !!                 06/11/02 (V. Masson) new LES budgets
 !  P. Wautelet: 05/2016-04/2018: new data structures and calls for I/O
 !  P. Wautelet 15/10/2020: restructure Les_diachro calls to use tfield_metadata_base type
+!  JL Redelsperger 03/21 modif buoyancy flix for OCEAN LES case  
 ! --------------------------------------------------------------------------
 !
 !*      0. DECLARATIONS
 !          ------------
 
 use modd_conf_n,      only: luserv
-use modd_cst,         only: xg
+use modd_cst,         only: xg, XALPHAOC
+USE MODD_DYN_n, ONLY : LOCEAN
 use modd_field,       only: NMNHDIM_BUDGET_LES_LEVEL, NMNHDIM_BUDGET_LES_TIME, &
                             NMNHDIM_BUDGET_TERM, NMNHDIM_UNUSED,               &
                             tfield_metadata_base, TYPEREAL
@@ -763,6 +765,9 @@ ELSE
   ZLES_BUDGET(:,:,ILES) =  XG * XLES_SUBGRID_ThlThv(:,:,1)   &
                               / XLES_MEAN_Th       (:,:,1)
 END IF
+IF (LOCEAN) THEN
+  ZLES_BUDGET(:,:,ILES) =  XG * XLES_SUBGRID_ThlThv(:,:,1) *XALPHAOC 
+END IF
 !
 !* 3.6 residual of subgrid budget
 !      --------------------------
diff --git a/src/MNH/write_lfifm1_for_diag.f90 b/src/MNH/write_lfifm1_for_diag.f90
index 4448d579bf7d4e31da5e0cedbb4c5eb226440a45..50131fea21510726da1ce8d84a5489d6f0e5f07f 100644
--- a/src/MNH/write_lfifm1_for_diag.f90
+++ b/src/MNH/write_lfifm1_for_diag.f90
@@ -146,6 +146,7 @@ END MODULE MODI_WRITE_LFIFM1_FOR_DIAG
 !  S  Bielli      02/2019: sea salt: significant sea wave height influences salt emission; 5 salt modes
 !  P. Wautelet 18/03/2020: remove ICE2 option
 !  P. Wautelet 11/03/2021: bugfix: correct name for NSV_LIMA_IMM_NUCL
+!  J.L Redelsperger 03/2021 Adding OCEAN LES Case and Autocoupled O-A LES 
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
@@ -455,6 +456,8 @@ CALL IO_Field_write(TPFILE,'DTSEG',TDTSEG)
 !
 CALL IO_Field_write(TPFILE,'CARTESIAN',LCARTESIAN)
 CALL IO_Field_write(TPFILE,'LBOUSS',   LBOUSS)
+CALL IO_Field_write(TPFILE,'LOCEAN',   LOCEAN)
+CALL IO_Field_write(TPFILE,'LCOUPLES', LCOUPLES)
 !
 IF (LCARTESIAN .AND. LWIND_ZM) THEN
   LWIND_ZM=.FALSE.
@@ -462,9 +465,15 @@ IF (LCARTESIAN .AND. LWIND_ZM) THEN
 END IF
 !*       1.4    Reference state variables :
 !
-CALL IO_Field_write(TPFILE,'RHOREFZ',XRHODREFZ)
-CALL IO_Field_write(TPFILE,'THVREFZ',XTHVREFZ)
-CALL IO_Field_write(TPFILE,'EXNTOP', XEXNTOP)
+IF (LCOUPLES.AND.LOCEAN) THEN
+  CALL IO_Field_write(TPFILE,'RHOREFZ',XRHODREFZO)
+  CALL IO_Field_write(TPFILE,'THVREFZ',XTHVREFZO)
+  CALL IO_Field_write(TPFILE,'EXNTOP', XEXNTOPO)
+ELSE
+  CALL IO_Field_write(TPFILE,'RHOREFZ',XRHODREFZ)
+  CALL IO_Field_write(TPFILE,'THVREFZ',XTHVREFZ)
+  CALL IO_Field_write(TPFILE,'EXNTOP', XEXNTOP)
+END IF
 !
 CALL IO_Field_write(TPFILE,'RHODREF',XRHODREF)
 CALL IO_Field_write(TPFILE,'THVREF', XTHVREF)
diff --git a/src/MNH/write_lfin.f90 b/src/MNH/write_lfin.f90
index ee394f919dee89150d40158838f3e4f19adee935..03363082cf5405f48c941abbd35769fcc40d3ca7 100644
--- a/src/MNH/write_lfin.f90
+++ b/src/MNH/write_lfin.f90
@@ -178,6 +178,7 @@ END MODULE MODI_WRITE_LFIFM_n
 !  T.Nagel   02/2021    : Add turbulence recycling
 !  P. Wautelet 10/03/2021: use scalar variable names for dust and salt
 !  P. Wautelet 11/03/2021: bugfix: correct name for NSV_LIMA_IMM_NUCL
+!  J.L. Redelsperger 03/2021: Add OCEAN and auto-coupled O-A LES cases
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
@@ -229,6 +230,7 @@ USE MODD_HURR_FIELD_n
 USE MODD_PREP_REAL, ONLY: CDUMMY_2D, XDUMMY_2D
 USE MODD_DUST
 USE MODD_SALT
+USE MODD_OCEANH
 USE MODD_PASPOL
 #ifdef MNH_FOREFIRE
 USE MODD_FOREFIRE
@@ -435,6 +437,8 @@ CALL IO_Field_write(TPFILE,'L2D',      L2D)
 CALL IO_Field_write(TPFILE,'PACK',     LPACK)
 CALL IO_Field_write(TPFILE,'CARTESIAN',LCARTESIAN)
 CALL IO_Field_write(TPFILE,'LBOUSS',   LBOUSS)
+CALL IO_Field_write(TPFILE,'LOCEAN',   LOCEAN)
+CALL IO_Field_write(TPFILE,'LCOUPLES', LCOUPLES)
 !
 CALL IO_Field_write(TPFILE,'SURF',     CSURF)
 CALL IO_Field_write(TPFILE,'CPL_AROME',LCPL_AROME)
@@ -1562,9 +1566,15 @@ END IF
 !
 !*       1.5    Reference state variables :
 !
-CALL IO_Field_write(TPFILE,'RHOREFZ',XRHODREFZ)
-CALL IO_Field_write(TPFILE,'THVREFZ',XTHVREFZ)
-CALL IO_Field_write(TPFILE,'EXNTOP', XEXNTOP)
+IF (LCOUPLES.AND.LOCEAN) THEN
+  CALL IO_Field_write(TPFILE,'RHOREFZ',XRHODREFZO)
+  CALL IO_Field_write(TPFILE,'THVREFZ',XTHVREFZO)
+  CALL IO_Field_write(TPFILE,'EXNTOP', XEXNTOPO)
+ELSE
+  CALL IO_Field_write(TPFILE,'RHOREFZ',XRHODREFZ)
+  CALL IO_Field_write(TPFILE,'THVREFZ',XTHVREFZ)
+  CALL IO_Field_write(TPFILE,'EXNTOP', XEXNTOP)
+END IF
 !
 !
 !*       1.6  Tendencies                                         
@@ -1943,8 +1953,85 @@ IF(LBLOWSNOW) THEN
   END IF
 ENDIF
 !
-!*       1.11   Forcing variables
+!*       1.11   Ocean LES variables
+!
+    IF ((.NOT.LCOUPLES).AND.LOCEAN) THEN
+WRITE (ILUOUT,*) 'LOCEAN NFRCLT', LOCEAN,NFRCLT,XSSUFL_T(1),XSSVFL_T(2),XSSTFL_T(1),XSSOLA_T(2)
+TZFIELD%CMNHNAME   = 'NFRCLT'
+TZFIELD%CSTDNAME   = ''
+TZFIELD%CLONGNAME  = 'NFRCLT'
+TZFIELD%CUNITS     = 'number of forc'
+TZFIELD%CDIR       = '--'
+TZFIELD%CCOMMENT   = 'nb de flux sfc forcant LES ocean'
+TZFIELD%NGRID      = 0
+TZFIELD%NTYPE      = TYPEINT
+TZFIELD%NDIMS      = 0
+TZFIELD%LTIMEDEP   = .FALSE.
+CALL IO_Field_write(TPFILE,TZFIELD,NFRCLT)
+!
+TZFIELD%CMNHNAME   = 'NINFRT'
+TZFIELD%CSTDNAME   = ''
+TZFIELD%CLONGNAME  = 'NINFRT'
+TZFIELD%CUNITS     = 'interv between  forc'
+TZFIELD%CDIR       = '--'
+TZFIELD%CCOMMENT   = 'int between flux sfc forcant LES ocean'
+TZFIELD%NGRID      = 0
+TZFIELD%NTYPE      = TYPEINT
+TZFIELD%NDIMS      = 0
+TZFIELD%LTIMEDEP   = .FALSE.
+CALL IO_Field_write(TPFILE,TZFIELD,NINFRT)
+!
+TZFIELD%CMNHNAME   = 'SSUFL_T'
+TZFIELD%CSTDNAME   = ''
+TZFIELD%CLONGNAME  = 'SSUFL'
+TZFIELD%CUNITS     = 'kg m-1 s-1'
+TZFIELD%CDIR       = '--'
+TZFIELD%CCOMMENT   = 'sfc stress along U to force ocean LES '
+TZFIELD%NGRID      = 0
+TZFIELD%NTYPE      = TYPEREAL
+TZFIELD%NDIMS      = 1
+TZFIELD%LTIMEDEP   = .FALSE.
+ CALL IO_Field_write(TPFILE,TZFIELD,XSSUFL_T(:))
+!
+TZFIELD%CMNHNAME   = 'SSVFL_T'
+TZFIELD%CSTDNAME   = ''
+TZFIELD%CLONGNAME  = 'SSVFL'
+TZFIELD%CUNITS     = 'kg m-1 s-1'
+TZFIELD%CDIR       = '--'
+TZFIELD%CCOMMENT   = 'sfc stress along V to force ocean LES '
+TZFIELD%NGRID      = 0
+TZFIELD%NTYPE      = TYPEREAL
+TZFIELD%NDIMS      = 1
+TZFIELD%LTIMEDEP   = .FALSE.
+ CALL IO_Field_write(TPFILE,TZFIELD,XSSVFL_T(:))
+!
+TZFIELD%CMNHNAME   = 'SSTFL_T'
+TZFIELD%CSTDNAME   = ''
+TZFIELD%CLONGNAME  = 'SSTFL'
+TZFIELD%CUNITS     = 'kg m3 K m s-1'
+TZFIELD%CDIR       = '--'
+TZFIELD%CCOMMENT   = 'sfc total heat flux to force ocean LES '
+TZFIELD%NGRID      = 0
+TZFIELD%NTYPE      = TYPEREAL
+TZFIELD%NDIMS      = 1
+TZFIELD%LTIMEDEP   = .FALSE.
+ CALL IO_Field_write(TPFILE,TZFIELD,XSSTFL_T(:))
+!
+TZFIELD%CMNHNAME   = 'SSOLA_T'
+TZFIELD%CSTDNAME   = ''
+TZFIELD%CLONGNAME  = 'SSOLA'
+TZFIELD%CUNITS     = 'kg m3 K m s-1'
+TZFIELD%CDIR       = '--'
+TZFIELD%CCOMMENT   = 'sfc solar flux to force ocean LES '
+TZFIELD%NGRID      = 0
+TZFIELD%NTYPE      = TYPEREAL
+TZFIELD%NDIMS      = 1
+TZFIELD%LTIMEDEP   = .FALSE.
+ CALL IO_Field_write(TPFILE,TZFIELD,XSSOLA_T(:))
+!
+END IF ! ocean sfc forcing end    
 !
+!*       1.12   Forcing variables
 !
 IF (LFORCING) THEN
 !
@@ -2230,7 +2317,7 @@ IF ( L2D_REL_FRC ) THEN
   ENDDO
 ENDIF
 !
-!*       1.11bis   Eddy Fluxes variables    ! Modif PP
+!*       1.13   Eddy Fluxes variables    ! Modif PP
 !
 IF ( LTH_FLX ) THEN
    CALL IO_Field_write(TPFILE,'VT_FLX',XVTH_FLUX_M)
@@ -2239,13 +2326,13 @@ END IF
 !
 IF ( LUV_FLX) CALL IO_Field_write(TPFILE,'VU_FLX',XVU_FLUX_M)
 !
-!*       1.12   Balloon variables
+!*       1.14   Balloon variables
 !
 !
 IF (LFLYER) CALL WRITE_BALLOON_n(TPFILE)
 !
 !
-!*       1.13    Filtered variables for hurricane initialization
+!*       1.15    Filtered variables for hurricane initialization
 !
 !
 IF ( CPROGRAM=='REAL  ' ) THEN
@@ -2290,7 +2377,7 @@ IF ( CPROGRAM=='REAL  ' ) THEN
 !
   END IF
 !
-!*       1.14    Dummy variables in PREP_REAL_CASE
+!*       1.16    Dummy variables in PREP_REAL_CASE
 !
   IF (ALLOCATED(CDUMMY_2D)) THEN
     TZFIELD%CSTDNAME   = ''
@@ -2311,7 +2398,7 @@ IF ( CPROGRAM=='REAL  ' ) THEN
 !
 END IF
 !
-!*       1.15    Wind turbine variables 
+!*       1.17    Wind turbine variables 
 !
 !             i) Main
 !