!$gpum horizontal klon
MODULE add_wake_tend_mod
  PRIVATE

  PUBLIC add_wake_tend

  CONTAINS

SUBROUTINE add_wake_tend(zddeltat, zddeltaq, zds, zdas, zddensw, zddensaw, zoccur, text, abortphy &
#ifdef ISO
        , zddeltaxt &
#endif
        )
!===================================================================
! Ajoute les tendances liees aux diverses parametrisations physiques aux
! variables d'etat des poches froides.
!===================================================================
!======================================================================
! Declarations
!======================================================================

  USE dimphy, ONLY: klon, klev
  USE phys_state_var_mod, ONLY: wake_deltat, wake_deltaq, wake_s, awake_s,  &
                              wake_dens, awake_dens

  USE print_control_mod, ONLY: prt_level
#ifdef ISO
  USE infotrac_phy, ONLY: ntiso    
  USE phys_state_var_mod, ONLY:  wake_deltaxt   
#endif
  IMPLICIT NONE

! Arguments :
!------------
  REAL, DIMENSION(klon, klev),   INTENT (IN)         :: zddeltat, zddeltaq
  REAL, DIMENSION(klon),         INTENT (IN)         :: zds, zdas, zddensw, zddensaw
  INTEGER, DIMENSION(klon),      INTENT (IN)         :: zoccur
  CHARACTER(LEN=*),              INTENT (IN)         :: text
  INTEGER,                       INTENT (IN)         :: abortphy
#ifdef ISO
  REAL, DIMENSION(ntiso, klon, klev), INTENT (IN)    :: zddeltaxt
#endif

! Local :
!--------

  INTEGER                                            :: i, l
#ifdef ISO
  INTEGER                                            :: ixt
#endif



  IF (prt_level >= 5) then
    WRITE (*,*) "In add_wake_tend, after ",text
    CALL flush
  ENDIF

  IF (abortphy==1) RETURN ! on n ajoute pas les tendance si le modele
                              ! a deja plante.

!======================================================================
!    Add tendencies to wake state variables
!======================================================================
  DO l = 1, klev
    DO i = 1, klon
      IF (zoccur(i) .GE. 1) THEN
        wake_deltat(i, l) = wake_deltat(i, l) + zddeltat(i,l)
        wake_deltaq(i, l) = wake_deltaq(i, l) + zddeltaq(i,l)
#ifdef ISO
        DO ixt=1,ntiso
          wake_deltaxt(ixt,i, l) = wake_deltaxt(ixt,i, l) + zddeltaxt(ixt,i,l)
        ENDDO
#endif
      ELSE
        wake_deltat(i, l) = 0.
        wake_deltaq(i, l) = 0.
#ifdef ISO
        DO ixt=1,ntiso
          wake_deltaxt(ixt,i, l) = 0.0
        ENDDO
#endif
      ENDIF   ! (zoccur(i) .GE. 1)
    ENDDO
  ENDDO

  DO i = 1, klon
    IF (zoccur(i) .GE. 1) THEN
      wake_s(i)     = wake_s(i)    + zds(i)
      awake_s(i)    = awake_s(i)    + zdas(i)
      wake_dens(i)  = wake_dens(i) + zddensw(i)
      awake_dens(i) = awake_dens(i) + zddensaw(i)
    ELSE
      wake_s(i)     = 0.
      awake_s(i)    = 0.
      wake_dens(i)  = 0.
      awake_dens(i) = 0.
    ENDIF   ! (zoccur(i) .GE. 1)
  ENDDO

RETURN
END SUBROUTINE add_wake_tend

END MODULE add_wake_tend_mod
