MODULE coupleur_MUSTANG

#if defined key_sedim_MUSTANG 

   !&E==========================================================================
   !&E                   ***  MODULE  coupleur_MUSTANG (option mixsed) ***
   !&E
   !&E
   !&E ** Purpose : concerns ...
   !&E              ONLY for key_mixsed
   !&E 
   !&E ** Description :
   !&E     subroutine coupl_MUSTANG_hydro       ! 
   !&E     subroutine coupl_MUSTANG_substance   ! correpondance nbre et type de variables 
   !&E     subroutine coupl_conv2MUSTANG        ! calcul des cv_wat, htot et alt_cw1
   !&E     subroutine coupl_MUSTANG2hydro       ! transfert corflux, corfluy, flx_w2s,flx_s2w
   !&E
   !&E ** History :
   !&E     ! 2016-11  (B.Thouvenin) : 
   !&E
!&E===================================================================================================================
#ifdef key_MARS
#include "toolcpp.h"
#endif
#include "coupleur_define_MUSTANG.h"
#include "coupleur_dimhydro_MUSTANG.h"

 
   IMPLICIT NONE

   !! * Interface
   
   
   !! * Accessibility

   ! functions & routines of this module, called outside :
#if ! defined key_MARS 
    PUBLIC coupl_MUSTANG_hydro,coupl_MUSTANG_substance,coupl_conv2MUSTANG, &
           coupl_MUSTANG2hydro
#else
    PUBLIC coupl_conv2MUSTANG
#endif

   PRIVATE

   !! * Shared or public module variables (variables used by MUSTANG but issued from hydro model or substances module  )
   !! * for MARS_MODEL, these variables are stored in comvar.. or comsubstance which are not the same for other model

#if ! defined key_MARS
   INTEGER,PARAMETER :: riosh=4,riolg=8,rlg=8,rsh=8,lchain=200
   REAL(KIND=rsh)  ,PARAMETER :: grav=9.81_rsh
   REAL(kind=rsh)  ,PARAMETER :: valmanq=999.0_rsh
   REAL(kind=rlg)  ,PARAMETER :: epsilon=0.00000001_rlg

   LOGICAL, PUBLIC    :: l_subs2D
   REAL(KIND=rsh),PUBLIC,DIMENSION(PROC_IN_ARRAY)           :: fwet,fwetp
   REAL(KIND=rsh),PUBLIC,DIMENSION(:,:,:,:),ALLOCATABLE     :: cv_wat
   REAL(KIND=rsh),PUBLIC,DIMENSION(:,:,:,:),ALLOCATABLE     ::  ws3
   REAL(KIND=rsh),PUBLIC,DIMENSION(NB_LAYER_WAT,PROC_IN_ARRAY)                :: THICK_LAYER_WAT_MUSTANG
   REAL(KIND=rsh),PUBLIC,DIMENSION(0:NB_LAYER_WAT,PROC_IN_ARRAY_0p1)          :: VERT_VISC_MUSTANG


   ! identifies et mis en comun dans comsubstance pour MARS
   INTEGER,PUBLIC                          :: nv_grav,nv_sand,nv_mud
   INTEGER,PUBLIC                          :: igrav1,igrav2,isand1,isand2,imud1,imud2
   INTEGER,PUBLIC                          :: nv_cp,nv_ncp,nv_dis,nv_sorb
   INTEGER,PUBLIC                          :: nv_fix,nv_dri,nv_int
   INTEGER,PUBLIC                          :: nvp,nvpc
   INTEGER,PUBLIC                          :: iscreenlog,ierrorlog,iwarnlog
   INTEGER,PUBLIC                          :: nv_adv,nv_state,nv_tot
   INTEGER,PUBLIC,DIMENSION(:),ALLOCATABLE :: irkm_var_assoc,irk_fil,itypv
   REAL(KIND=rsh),DIMENSION(:)      ,ALLOCATABLE :: typart,typdiss,unit_modif_mudbio_N2dw
   REAL(KIND=rsh),DIMENSION(:)      ,ALLOCATABLE :: ws_free_min, ws_free_max
   REAL(KIND=rsh),DIMENSION(:,:)    ,ALLOCATABLE :: ws_free_para, ws_hind_para
   INTEGER       ,DIMENSION(:)      ,ALLOCATABLE :: ws_free_opt,ws_hind_opt
   REAL(KIND=rsh),DIMENSION(:)      ,ALLOCATABLE :: tocd

   CHARACTER(LEN=lchain),DIMENSION(:),ALLOCATABLE :: name_var
#endif
 
 CONTAINS
   !!===========================================================================
#if ! defined key_MARS 
  SUBROUTINE coupl_MUSTANG_hydro
 
   !&E--------------------------------------------------------------------------
   !&E                 ***  ROUTINE coupl_MUSTANG_hydro  ***
   !&E
   !&E ** Purpose : definition de variables ou parametres definis dans MARS et 
   !&E              qui ne seraient pas deja definies dans le modele hydro
   !&E          si autre nom : a definir dans coupl_define_MUSTANG.h
   !&E          si pas connu : a initialiser ?
   !&E
   !&E ** Description : 
   !&E
   !&E ** Called by : 
   !&E
   !&E ** External calls : 
   !&E
   !&E ** Reference :
   !&E
   !&E ** History :
   !&E       !  2016-11  (B. Thouvenin) 
   !&E
   !&E--------------------------------------------------------------------------
   !! * Modules used

   !! * Arguments
 

   !! * Local declarations

   !!--------------------------------------------------------------------------
   !! * Executable part

   fwet(:,:)=1.0_rsh
   fwetp(:,:)=1.0_rsh
   iscreenlog=6
   ierrorlog=6   
   iwarnlog=6
    
   END SUBROUTINE coupl_MUSTANG_hydro
#endif
   !!===========================================================================
#if ! defined key_MARS
  SUBROUTINE coupl_MUSTANG_substance(icall)
 
   !&E--------------------------------------------------------------------------
   !&E                 ***  ROUTINE coupl_MUSTANG_dim  ***
   !&E
   !&E ** Purpose : 
   !&E
   !&E ** Description : 
   !&E
   !&E ** Called by : 
   !&E
   !&E ** External calls : 
   !&E
   !&E ** Reference :
   !&E
   !&E ** History :
   !&E       !  2016-11  (B. Thouvenin) 
   !&E
   !&E--------------------------------------------------------------------------
   !! * Modules used

   !! * Arguments
   INTEGER,INTENT(IN)  :: icall

   !! * Local declarations
   INTEGER    :: iv

   !!--------------------------------------------------------------------------
   !! * Executable part

   IF(icall==0) THEN


     ! definir nombre de variables utilisees dans MUSTANG
     ! dans MARS c est le module substance qui gere 

     !==========================================================================
     ! a ecrire en dur ??? 
     ! ou a mettre plutot dans un fichier de donnees ou dans un fichier definissant les variables a simuler
     !==========================================================================
     ! nombre de variables particulaires de type gravier (GRAVEL)
      nv_grav=0
      ! nombre de variables particulaires de type SABLE (SAND)
      nv_sand=1
      ! nombre de variables particulaires de type VASE (MUD)
      nv_mud=2
      ! nombre de variables dissoutes (DISSOLVED)
      nv_dis=1
      ! nombre de variables fixees (not transported)
      nv_fix=0
      ! nombre de variables forcantes (Driving)
      nv_dri=0
      ! nombre de variables intermediaires (combinate, intermediate.)
      nv_int=0

      ! initialize the number of variables according to their type
      nvpc=nv_cp+nv_mud+nv_sand+nv_grav
      nvp=nvpc+nv_ncp+nv_sorb
      nv_adv=nvp+nv_dis
      nv_state=nv_adv+nv_fix
      nv_tot=nv_state+nv_dri+nv_int
    
    ELSE
    !  icall =1 apres sed_alloc 

      ALLOCATE(name_var(-1,nv_tot))
      ALLOCATE(typart(nv_state))
      ALLOCATE(typdiss(nv_adv))
      ALLOCATE(itypv(nv_tot)
      ALLOCATE(irk_fil(nv_tot))
      IF (nvp > 0) THEN
        ALLOCATE(ws_free_opt(nvp)) 
        ALLOCATE(ws_hind_opt(nvp)) 
        ALLOCATE(ws_free_para(4,nvp)) 
        ALLOCATE(ws_free_min(nvp)) 
        ALLOCATE(ws_free_max(nvp)) 
        ALLOCATE(ws_hind_para(2,nvp)) 
        ALLOCATE(tocd(nvp))
        ws_free_min(:)=0.0_rsh
        ws_free_max(:)=0.0_rsh
        ws_free_para(:,:)=0.0_rsh
        ws_hind_para(:,:)=0.0_rsh
        ws_free_opt(:)=0
        ws_hind_opt(:)=0
        tocd(:)=0.0_rsh
      ENDIF
      ALLOCATE(l_subs2D(nv_adv))
#if defined key_sand2D
      ALLOCATE(l_outsandrouse(nvp))
#endif
      ALLOCATE(ws3(NB_LAYER_WAT,nv_adv,PROC_IN_ARRAY))
      ALLOCATE(cv_wat(NB_VAR_ADV,NB_LAYER_WAT,PROC_IN_ARRAY_m1p2))

! et Lecture des infos sur les variables
    ! a lire :
    ! noms des variables (name_var), type (itypv), vitesses de chute (ws_free..), 
    ! itypv=1 pour graviers ; =2 pour sables ; =3 pour vases, 
    ! itypv=4 pour particulaires non constitutives, 
    ! itypv=5 pour sorbees sur part constitutives 
    ! itypv=6 pour dissoutes, =7 pour fixees, =8 pour forcantes = 9 pour intermediaire
    ! pour les particulaires, donner diametre, tocd, ros 
    ! pour les vases et les particulaires non constit, donner les parametres definissant les vitesses de chute
    ! concentrations initiales dans leau et les sediments
    ! pour les sables : traitement en 2D ou 3D (l_subs2D)
    ! pour les part. sorbees, donner les indices ou numeros des variables part. constitutives 
    !                         sur lesquelles elles sont sorbees (irkm_var_assoc)
    ! identification of igrav1,igrav2,isand1,isand2,imud1,imud2
    ! ---------------------------------------------------------
      igrav1=1
      igrav2=nv_grav
      isand1=igrav2+1
      isand2=igrav2+nv_sand
      imud1=isand2+1
      imud2=isand2+nv_mud 

      typart(1:nv_state)=0.
      typart(1:nvpc)=1.
      typdiss(nvp+1:nv_adv)=1.
      typdiss(1:nvp)=0.

      l_subs2D(:)=.false.
#if defined key_sand2D
      l_outsandrouse(:)=.false.
#endif

#ifdef key_sand2D
      DO iv=1,igrav2
        l_subs2D(iv)=.TRUE.
      ENDDO
      DO iv=isand1,isand2
        l_subs2D(iv)=.TRUE.
        l_outsandrouse(iv)=.FALSE.
      ENDDO
#endif
 
     ! variables deja donnees dans le bon ordre en entree
     ! donc
      DO iv=1,nv_tot
        irk_fil(iv)=iv
        unit_modif_mudbio_N2dw(iv)=1.0_rsh
      ENDDO
  

   END SUBROUTINE coupl_MUSTANG_substance
#endif
    !!==============================================================================

  SUBROUTINE coupl_conv2MUSTANG(ifirst,ilast,jfirst,jlast,iappel,h0,ssh,    &
#if ! defined key_MARS
                     THICK_LAYER_WAT,VERT_VISC,W_SETTL,SETTL_FLUXSUM_w2s, &
#endif
                     WATER_CONCENTRATION,SALINITY_MOD,TEMPERATURE_MOD)

   !&E--------------------------------------------------------------------------
   !&E                 ***  ROUTINE coupl_conv2MUSTANG  ***
   !&E
   !&E ** Purpose : transfert cv_Wat and htot et alt_cw1 computation
   !&E
   !&E ** Description :  
   !&E  arguments IN : h0,ssh,WATER_CONCENTRATION, SALINITY_MOD, TEMPERATURE_MOD
   !&E  arguments IN (si pas MARS): THICK_LAYER_WAT,VERT_VISC,W_SETTL,SETTL_FLUXSUM_w2s
   !&E  arguments OUT: aucun (all in comMUSTANG)
   !&E     
   !&E   variables OUT :   
   !&E       htot (hauteur totale)
   !&E       epn_bottom (epaisseur couche de fond)
   !&E       sal_bottom_MUSTANG,temp_bottom_MUSTANG (salinite, temperature dans la couche de fond)
   !&E       cw_bottom_MUSTANG ( concentrations dans la couche de fond)
   !&E     
   !&E   appel initial (iappel=0 pour l initialisation):  
   !&E      extraction des epaisseurs, salinites, temperatures et concentrations dans le fond de la colonne d eau
   !&E
   !&E   premier appel :  
   !&E       extraction des epaisseurs, salinites, temperatures et concentrations dans le fond de la colonne d eau
   !&E       calcul des hauteurs d eau totales  
   !&E       calcul de alt_cw1  :altitude de Cw dans la couche du fond
   !&E       si pas MARS : conversion pour transmettre a MUSTANG des variables hydro : 
   !&E                      THICK_LAYER_WAT : epaisseur des couches  
   !&E                      VERT_VISC : viscosite verticale dans la colonne d eau
   !&E                      W_SETTL  : vitesse de chute des vairiables particulaires
   !&E                      cv_wat  : concentrations des variables dans l eau apres conversion pour etre utilisable par MUSTANG
   !&E     
   !&E   second appel :  
   !&E       extraction des epaisseurs, salinites, temperatures et concentrations dans le fond de la colonne d eau
   !&E       calcul des hauteurs d eau totales  
   !&E       si pas MARS : conversion pour transmettre a MUSTANG des variables hydro : 
   !&E                      SETTL_FLUXSUM_w2s : flux de depot des variables particulaires effectif pendant transport
   !&E    
   !&E ** Called by :  sed_MUSTANG_first (iappel=1) & sed_MUSTANG_deposition (iappel=2)
   !&E
   !&E ** Reference : 
   !&E ** History :
   !&E       !  2016-11  (B.Thouvenin) 
   !&E
   !&E--------------------------------------------------------------------------
   !! * Modules used
   USE comMUSTANG
#ifdef key_MARS
   USE comvars2d,    ONLY : ig,id,jb,jh,fwet
   USE comvars3d,    ONLY : dsigu,sigw,sig
   USE toolgeom,     ONLY : f_dzu
   USE_MPI toolmpi,    ONLY : ex_i_rsh,ex_j_rsh
#if defined key_siggen || defined key_gencoord
   USE toolgeom,       ONLY : f_hzu
#endif
#else
   
#endif
   !! * Arguments 
   INTEGER, INTENT(IN)                           :: ifirst,ilast,jfirst,jlast,iappel
   REAL(KIND=rsh),DIMENSION(PROC_IN_ARRAY_m2p2),INTENT(IN)      :: h0,ssh              
   REAL(KIND=rsh),DIMENSION(DIM_MODELE_HYDRO_cw), INTENT(IN) :: WATER_CONCENTRATION  
   REAL(KIND=rsh),DIMENSION(PROC_IN_ARRAY_TEMPSAL), INTENT(IN)   :: SALINITY_MOD,TEMPERATURE_MOD  
#if ! defined key_MARS   
   REAL(KIND=rsh),DIMENSION(DIM_MODELE_HYDRO_eps), INTENT(IN)   :: THICK_LAYER_WAT       
   REAL(KIND=rsh),DIMENSION(DIM_MODELE_HYDRO_nz), INTENT(IN)   :: VERT_VISC         
   REAL(KIND=rsh),DIMENSION(DIM_MODELE_HYDRO_ws), INTENT(IN) :: W_SETTL             
   REAL(KIND=rsh),DIMENSION(DIM_MODELE_HYDRO_flx_SW), INTENT(IN)   :: SETTL_FLUXSUM_w2s    
#endif
   
   !! * Local declarations
   INTEGER                            :: iv,k,i,j



   !!---------------------------------------------------------------------------
   !! * Executable part

!$OMP DO SCHEDULE(RUNTIME) PRIVATE(i,j)
   DO j=jfirst,jlast
#ifdef key_MARS
      DO i=MAX0(ifirst,ig(j)+1),MIN0(ilast,id(j)-1)
        IF(j.GE.jb(i)+1 .AND. j .LE. jh(i)-1) THEN
#else
      DO i=ifirst,ilast
#endif

           ! extraction des concentrations du fond de la colonne d eau
           !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
#ifdef key_MARS
            sal_bottom_MUSTANG(i,j)=SALINITY_MOD(1,i,j)
            temp_bottom_MUSTANG(i,j)=TEMPERATURE_MOD(1,i,j)
            cw_bottom_MUSTANG(:,i,j)=WATER_CONCENTRATION(:,1,i,j)
#else
            !sal_bottom_MUSTANG(i,j)=SALINITY_MOD(?)
            !temp_bottom_MUSTANG(i,j)=TEMPERATURE_MOD(?)
            !cw_bottom_MUSTANG(:,i,j)=WATER_CONCENTRATION(? en k=1)
#endif
            ! epaisseur couche eau fond ou altitude en haut de la couche de fond
            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
#ifdef key_MARS
            epn_bottom_MUSTANG(i,j)=f_dzu(h0(i,j),ssh(i,j),1,i,j)
          ENDIF
#else
          ! epn_bottom_MUSTANG(i,j)=
#endif

       ENDDO
   ENDDO
!$OMP END DO

   IF(iappel > 0 ) THEN
!$OMP DO SCHEDULE(RUNTIME) PRIVATE(i,j)
    DO j=JMIN_MPI,JMAX_MPI
      DO i=IMIN_MPI,IMAX_MPI

          !  htot : hauteur d'eau totale
          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
          htot(i,j)=h0(i,j)+ssh(i,j)

       ENDDO
    ENDDO
!$OMP END DO
!    echange MPI des hauteurs totales si besoin en i+1 ou i-1..
!    dans le cas d erosion laterale et de glissement des depots
#ifdef key_MARS     
OMPMPI barrier
OMPMPI master
    CALL_MPI ex_i_rsh(-2,2,1,liminm2,limaxp2,ljminm2,ljmaxp2,htot(liminm2:limaxp2,ljminm2:ljmaxp2))
    CALL_MPI ex_j_rsh(-2,2,1,liminm2,limaxp2,ljminm2,ljmaxp2,htot(liminm2:limaxp2,ljminm2:ljmaxp2))
OMPMPI end master
OMPMPI barrier
OMPMPI flush(htot)

#endif

   ENDIF
   IF (iappel == 1) THEN
   ! first call before evaluation of settling velocities, erosion, consolidation, diffusion
   
!$OMP DO SCHEDULE(RUNTIME) PRIVATE(i,j)
     DO j=jfirst,jlast
#ifdef key_MARS
       DO i=MAX0(ifirst,ig(j)+1),MIN0(ilast,id(j)-1)
        IF(j.GE.jb(i)+1 .AND. j .LE. jh(i)-1) THEN
#else
       DO i=ifirst,ilast
#endif
   
          ! alt_cw1 : altitude du point de calcul de la concentration dans la couche du fond
          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
#ifdef key_MARS
            alt_cw1(i,j)=(1.0_rsh+sig(1))*htot(i,j)
#else
   ! autre modele que MARS
     !calcul de alt_w1
   !       alt_cw1(i,j) = ?

     ! changement des ordres de dimensions  des concentrations (cv_wat)
     ! si vitesses de chute sont modifies dans modele hydro ?? changement des ordres de dimensions des vitesses de chute dans l eau (ws3) 
   !        DO k=1,kmax
   !        DO iv=1,nv_adv
   !          !ws3(k,iv,i,j)=WAT_SETTL(??)??ATTENTION iv dans le bon ordre - faire correspondance
   !          cv_wat(k,iv,i,j)=WATER_CONCENTRATION(???)
   !        ENDDO
   !        ENDDO

     ! changement des ordres de dimensions des epaisseurs de couche (eps) dans l eau
   !        DO k=1,kmax
   !          THICK_LAYER_WAT_MUSTANG(k,i,j)=THICK_LAYER_WAT(??)??
   !        ENDDO


    ! changement des ordres de dimensions des viscosities turbulentes verticales (nz) dans l eau
   !        DO k=0,kmax
   !          VERT_VISC_MUSTANG(k,i,j)=VERT_VISC(??)??
   !        ENDDO
   

#endif
          

#ifdef key_MARS
        ENDIF
#endif
       ENDDO
     ENDDO
!$OMP END DO

    ELSE IF (iappel==2) THEN
#if ! defined key_MARS
   ! second call before evaluation of sediment deposition :  cumulated settling flux only if no key_MARS

!$OMP DO SCHEDULE(RUNTIME)
     DO j=jfirst,jlast
      DO i=ifirst,ilast
               !  flx_w2s_sum(iv,i,j)=SETTL_FLUXSUM_w2s(??) ! flux de depot cumule effectif apres transport
      ENDDO
     ENDDO
!$OMP END DO
#endif
    ENDIF

  END SUBROUTINE coupl_conv2MUSTANG      

   !!==============================================================================
#if ! defined key_MARS
  SUBROUTINE coupl_MUSTANG2hydro(ifirst,ilast,jfirst,jlast,settl_flx,  &
                            CORFLUX_SAND,CORFLUY_SAND,WAT_SETTL,       &
                            eros_flx,eros_flux_TEMP,eros_flux_SAL)

   !&E--------------------------------------------------------------------------
   !&E                 ***  ROUTINE coupl_MUSTANG2flx ***
   !&E
   !&E ** Purpose : transfert corflux, corfluy, flx_w2s , ws3 ,flx_s2w
   !&E               dans les bonnes dimensions pour le code hydro
   !&E
   !&E ** Description : conversion pour modele hydro 
   !&E  arguments OUT:
   !&E     settl_flx : tendance au depot
   !&E     corflux_SAND,corfluy_SAND : correction flux horizontaux pour sables
   !&E     w_settl : vitesse de chute
   !&E     eros_flx : flux d erosion pour eau, substances, temperature, salinite
   !&E     eros_flux_TEMP et eros_flix_SAL : flux d erosion pour temperature, salinite
   !&E     
   !&E     
   !&E ** Called by :  sed_MUSTANG_first
   !&E
   !&E ** Reference : 
   !&E ** History :
   !&E       !  2016-11  (B.Thouvenin) 
   !&E
   !&E--------------------------------------------------------------------------
   !! * Modules used


   !! * Arguments 
   INTEGER, INTENT(IN)                                    :: ifirst,ilast,jfirst,jlast
   REAL(KIND=rsh),DIMENSION(DIM_MODELE_HYDRO_flx_SW), INTENT(OUT) :: eros_flx                     
   REAL(KIND=rsh),DIMENSION(DIM_MODELE_HYDRO_flx_2D), INTENT(OUT) :: eros_flux_TEMP,eros_flux_SAL   
   REAL(KIND=rsh),DIMENSION(DIM_MODELE_HYDRO_flx_SW), INTENT(OUT) :: settl_flx                    
   REAL(KIND=rsh),DIMENSION(DIM_MODELE_HYDRO_corflx), INTENT(OUT) :: CORFLUX_SAND,CORFLUY_SAND   
   REAL(KIND=rsh),DIMENSION(DIM_MODELE_HYDRO_ws), INTENT(INOUT) :: WAT_SETTL
 
   
   !! * Local declarations
   INTEGER                            :: iv,k,i,j



   !!---------------------------------------------------------------------------
   !! * Executable part

   ! exchange erosion and settling fluxes
   !  (which merged for dissolved variables : erosion-settling+consolidation-diffusion)
!$OMP DO SCHEDULE(RUNTIME)
      DO j=jfirst,jlast
      DO i=ifirst,ilast

        DO iv=1,nvp
            settl_flx(i,j,iv)=flx_w2s(iv,i,j)
            CORFLUX_SAND(i,j,iv)=corflux(iv,i,j)
            CORFLUY_SAND(i,j,iv)=corfluy(iv,i,j)
            WAT_SETTL(i,j,k,iv)=ws3(iv,k,i,j)
        ENDDO
        DO iv=1,nv_adv
            eros_flx(i,j,iv)=flx_s2w(iv,i,j)
        ENDDO
        eros_flux_TEMP(i,j)=flx_s2w(-1,i,j)
        eros_flux_SAL(i,j)=flx_s2w(0,i,j)

        ! no transfert of settl_flx_TEMP et SAL and for dissolved subst. because they are merged in EROS_FLUX_s2w
        ! for dissolved variables (EROS_FLUX_s2w=erosion-settling+consolidation-diffusion) 
      ENDDO
      ENDDO
!$OMP END DO
   ENDIF


  END SUBROUTINE coupl_MUSTANG2hydro    
#endif

   !!==============================================================================
#endif

END MODULE coupleur_MUSTANG

