      SUBROUTINE divgrad_p (klevel,h, lh, divgra )
      USE parallel
      USE times
      IMPLICIT NONE
c
c=======================================================================
c
c  Auteur :   P. Le Van
c  ----------
c
c                              lh
c      calcul de  (div( grad ))   de h  .....
c      h  et lh  sont des arguments  d'entree pour le s-prog
c      divgra     est  un argument  de sortie pour le s-prog
c
c=======================================================================
c
c   declarations:
c   -------------
c
#include "dimensions.h"
#include "paramet.h"
#include "comgeom.h"
#include "comdissipn.h"
#include "logic.h"
c
      INTEGER klevel
      REAL h( ip1jmp1,klevel ), divgra( ip1jmp1,klevel )
c
      REAL ghy(ip1jm,llm), ghx(ip1jmp1,llm)

      INTEGER  l,ij,iter,lh
c
      EXTERNAL  filtreg
      EXTERNAL  SCOPY, grad, covcont, diverg
      INTEGER ijb,ije,jjb,jje
c
c
c      CALL SCOPY ( ip1jmp1*klevel,h,1,divgra,1 )
      
      ijb=ij_begin
      ije=ij_end
      divgra(ijb:ije,1:klevel)=h(ijb:ije,1:klevel)

c

c
      DO 10 iter = 1,lh

      jjb=jj_begin
      jje=jj_end
      CALL filtreg_p ( divgra,jjb,jje,jjp1,klevel,2,1,.true.,1  )

c      call exchange_Hallo(divgra,ip1jmp1,llm,0,1)
      
      call suspend_timer(timer_dissip)
      call exchange_Hallo(divgra,ip1jmp1,llm,1,1)
      call resume_timer(timer_dissip)
       
      CALL    grad_p (klevel,divgra, ghx  , ghy          )

      call suspend_timer(timer_dissip)
      call exchange_Hallo(ghy,ip1jm,llm,1,0)
      call resume_timer(timer_dissip)
      
      CALL  diverg_p (klevel,  ghx , ghy  , divgra       )

      jjb=jj_begin
      jje=jj_end
      CALL filtreg_p( divgra,jjb,jje,jjp1,klevel,2,1,.true.,1)

      DO 5 l = 1,klevel
      DO 4  ij = ijb, ije
      divgra( ij,l ) = - cdivh * divgra( ij,l )
   4  CONTINUE
   5  CONTINUE
c
  10  CONTINUE
      RETURN
      END
