MODULE coupleur_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===================================================================================================================





























































!!! definitions de dimensions, variables, parametres pour MUSTANG
!!! et couplage avec autre modele




!&E==========================================================================
!&E                   ***    coupleur_MUSTANG  ***
!&E==========================================================================

!/* Spatial MPI limits grid
!*/





!/* Spatial Grid limits definition  of loops
!*/







!/* dimensions table definition
!*/







!/* general variable hydro , bathy, time ... defined in hydro model but using by MUSTANG
!*/


























!/* number of advected and total substances
!*/
! nombre de variables transportees

! nombre de variables totales (variable transportees,+variables fixees, +variables forcantes etc..)


!/* name of variables in MUSTANG (dimensions order could changed)
!*/
! layers thickness (ordre des dimensions differentes)

! vertical eddy viscosity  (ordre des dimensions differentes)


!/* name of fluxes exchange between MUSTANG and hydro model
!*/











!/* dimensions of variables in hydro modele
!*/!! dimensions des variables 3D ou 4D dans le modele hydro !! (si pas MARS)

!!!#define DIM_MODELE_HYDRO_cw_bottom nv_tot,liminm1:limaxp2,ljminm1:ljmaxp2
!#define DIM_COORD_SIG 0:kmax+1





!/* Laterale Erosion
!*/
! Erosion laterale dans les mailles voisines (pourrait dependre architecture grille)













!/* sliding proces of fluid mud
!*/
! glissement depot : pente du fond dans les mailles voisines  (pourrait dependre architecture grille)








!!! definitions de dimensions, variables, parametres pour MUSTANG
!!! et couplage avec autre modele




!&E==========================================================================
!&E                   ***    coupleur_MUSTANG dimensions hydro ***
!&E==========================================================================




! parametres issus du code Hydrodynamique (dimensions grille et dimensions tableau/proc)
   USE parameters,  ONLY : lchain,rsh,rlg,riosh,kmax,imin,imax,jmin,jmax,ksdmin,ksdmax,  &
                           limin,limax,ljmin,ljmax,liminp1,limaxm1,ljminp1,ljmaxm1,      &
                           liminm1,ljminm1,limaxp1,ljmaxp1,limaxp2,ljmaxp2,              &
                           liminm2,ljminm2,ljminp2
   USE comsubstance, ONLY : nv_tot,nv_adv,nv_state,nvp
! provisoire
   USE comvars2d,    ONLY :  t 
   




 
   IMPLICIT NONE

!! * Interface
   
   
!! * Accessibility

! functions & routines of this module, called outside :

    PUBLIC coupl_conv2MUSTANG


   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


 
 CONTAINS
!!===========================================================================

!!===========================================================================

!!==============================================================================

  SUBROUTINE coupl_conv2MUSTANG(ifirst,ilast,jfirst,jlast,iappel,h0,ssh,    &

                     cv_wat,sal,temp)

!&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,cv_wat, sal, temp
!&E  arguments IN (si pas MARS): eps,nz,W_SETTL,flx_w2s_sum
!&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                      eps : epaisseur des couches
!&E                      nz : 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                      flx_w2s_sum : 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

   USE comvars2d,    ONLY : ig,id,jb,jh,fwet
   USE comvars3d,    ONLY : dsigu,sigw,sig
   USE toolgeom,     ONLY : f_dzu
   USE toolmpi,    ONLY : ex_i_rsh,ex_j_rsh


!! * Arguments
   INTEGER, INTENT(IN)                           :: ifirst,ilast,jfirst,jlast,iappel
   REAL(KIND=rsh),DIMENSION(liminm2:limaxp2 , ljminm2:ljmaxp2),INTENT(IN)      :: h0,ssh              
   REAL(KIND=rsh),DIMENSION(nv_tot,kmax,liminm1:limaxp2,ljminm1:ljmaxp2), INTENT(IN) :: cv_wat  
   REAL(KIND=rsh),DIMENSION(1:kmax,liminm1:limaxp2,ljminm1:ljmaxp2), INTENT(IN)   :: sal,temp  

   
!! * Local declarations
   INTEGER                            :: iv,k,i,j



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

!$OMP DO SCHEDULE(RUNTIME) PRIVATE(i,j)
   DO j=jfirst,jlast

      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


! extraction des concentrations du fond de la colonne d eau
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

            sal_bottom_MUSTANG(i,j)=sal(1,i,j)
            temp_bottom_MUSTANG(i,j)=temp(1,i,j)
            cw_bottom_MUSTANG(:,i,j)=cv_wat(:,1,i,j)

! epaisseur couche eau fond ou altitude en haut de la couche de fond
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

            epn_bottom_MUSTANG(i,j)=f_dzu(h0(i,j),ssh(i,j),1,i,j)
          ENDIF


       ENDDO
   ENDDO
!$OMP END DO

   IF(iappel > 0 ) THEN
!$OMP DO SCHEDULE(RUNTIME) PRIVATE(i,j)
    DO j=ljmin,ljmax
      DO i=limin,limax

!  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

!$OMP barrier
!$OMP master
    CALL ex_i_rsh(-2,2,1,liminm2,limaxp2,ljminm2,ljmaxp2,htot(liminm2:limaxp2,ljminm2:ljmaxp2))
    CALL ex_j_rsh(-2,2,1,liminm2,limaxp2,ljminm2,ljmaxp2,htot(liminm2:limaxp2,ljminm2:ljmaxp2))
!$OMP end master
!$OMP barrier
!$OMP flush(htot)



   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

       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

   
! alt_cw1 : altitude du point de calcul de la concentration dans la couche du fond
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

            alt_cw1(i,j)=(1.0_rsh+sig(1))*htot(i,j)

          


        ENDIF

       ENDDO
     ENDDO
!$OMP END DO

    ELSE IF (iappel==2) THEN

    ENDIF

  END SUBROUTINE coupl_conv2MUSTANG      

!!==============================================================================


!!==============================================================================


END MODULE coupleur_MUSTANG

