*=*=*=*= addfi.html =*=*=*=*
SUBROUTINE addfi

SUBROUTINE addfi


      SUBROUTINE addfi(nq, pdt, leapf, forward,
     S          pucov, pvcov, ph, pq   , pext,
     S          pdufi, pdvfi, pdhfi,pdqfi, pdpfi)
      IMPLICIT NONE
c
c   ... Auteurs : F.Hourdin, P.Le Van, Z.X.Li   ...
c
c=======================================================================
c
c    Addition of the physical tendencies
c
c    Interface :
c    -----------
c
c      Input :
c      -------
c      pdt                    time step of integration
c      leapf                  logical
c      forward                logical
c      pucov(ip1jmp1,llm)     first conponent of the covariant velocity
c      pvcov(ip1ip1jm,llm)    second conponent of the covariant velocity
c      ph(ip1jmp1,llm)        potential temperature
c      pts(ip1jmp1,llm)      surface temperature
c      pdufi(ip1jmp1,llm)     |
c      pdvfi(ip1jm,llm)       |   respective
c      pdhfi(ip1jmp1)         |   tendencies
c      pdtsfi(ip1jmp1)        |
c
c      Output :
c      --------
c      pucov
c      pvcov
c      ph
c      pts
c
c
c=======================================================================
c
c-----------------------------------------------------------------------
c
c    0.  Declarations :
c    ------------------
c
#include "dimensions.h"
#include "paramet.h"
#include "comconst.h"
#include "comgeom.h"
c
c    Arguments :
c    -----------
c
      INTEGER nq

      REAL pdt
c
      REAL pvcov(ip1jm,llm),pucov(ip1jmp1,llm),ph(ip1jmp1,llm)
      REAL pq(ip1jmp1,llm,nq),pext(ip1jmp1)
c
      REAL pdvfi(ip1jm,llm),pdufi(ip1jmp1,llm)
      REAL pdqfi(ip1jmp1,llm,nq),pdhfi(ip1jmp1,llm),pdpfi(ip1jmp1)
c
      logical leapf,forward
c
c
c    Local variables :
c    -----------------
c
      INTEGER j,k,iq
      REAL seuil_vap, seuil_liq, qtest
      PARAMETER (seuil_vap=1.0e-10) ! seuil pour l'eau vapeur
      PARAMETER (seuil_liq=1.0e-11) ! seuil pour l'eau liquide
c
c
c     Il est souhaitable mais non obligatoire que les valeurs des 2
c     parametres seuil_vap, seuil_liq soient pareilles a celles qui
c     sont utilisees dans la routine  INTEGRD  .
c-----------------------------------------------------------------------

      DO k = 1,llm
         DO j = 1,ip1jmp1
            ph(j,k)= ph(j,k) + pdhfi(j,k) * pdt
         ENDDO
      ENDDO

      DO k = 1,llm

         DO j = iip2,ip1jm
            pucov(j,k)= pucov(j,k) + pdufi(j,k) * pdt
         ENDDO
      ENDDO

      DO k = 1,llm
         DO j = 1,ip1jm
            pvcov(j,k)= pvcov(j,k) + pdvfi(j,k) * pdt
         ENDDO
      ENDDO


c    ######    P. Le Van ( Modif  18/12/94,  25/01/96 )   #######
c
      DO j = 1,ip1jmp1
         pext(j) = pext(j) + pdpfi(j) * pdt
      ENDDO

c
      DO iq = 1, nq

        IF( iq.EQ.1 ) THEN
         qtest = seuil_vap
        ELSE
         qtest = seuil_liq
        ENDIF

           DO k = 1,llm
             DO j = 1,ip1jmp1
               pq(j,k,iq)= pq(j,k,iq) + pdqfi(j,k,iq) * pdt
               pq(j,k,iq)= AMAX1( pq(j,k,iq), qtest )
             ENDDO
           ENDDO
      ENDDO


      RETURN
      END