| 1 | ! | 
|---|
| 2 | ! $Header$ | 
|---|
| 3 | ! | 
|---|
| 4 | SUBROUTINE divergf(klevel,x,y,div) | 
|---|
| 5 |   ! | 
|---|
| 6 |   ! P. Le Van | 
|---|
| 7 |   ! | 
|---|
| 8 |   !  ********************************************************************* | 
|---|
| 9 |   !  ... calcule la divergence a tous les niveaux d'1 vecteur de compos. | 
|---|
| 10 |   ! x et y... | 
|---|
| 11 |   !          x et y  etant des composantes covariantes   ... | 
|---|
| 12 |   !  ********************************************************************* | 
|---|
| 13 |   USE comgeom_mod_h | 
|---|
| 14 |   USE dimensions_mod, ONLY: iim, jjm, llm, ndm | 
|---|
| 15 | USE paramet_mod_h | 
|---|
| 16 | IMPLICIT NONE | 
|---|
| 17 |   ! | 
|---|
| 18 |   !  x  et  y  sont des arguments  d'entree pour le s-prog | 
|---|
| 19 |   !    div      est  un argument  de sortie pour le s-prog | 
|---|
| 20 |   ! | 
|---|
| 21 |   ! | 
|---|
| 22 |  | 
|---|
| 23 |  | 
|---|
| 24 |  | 
|---|
| 25 |   ! | 
|---|
| 26 |   !    ..........          variables en arguments    ................... | 
|---|
| 27 |   ! | 
|---|
| 28 |   INTEGER :: klevel | 
|---|
| 29 |   REAL :: x( ip1jmp1,klevel ),y( ip1jm,klevel ),div( ip1jmp1,klevel ) | 
|---|
| 30 |   INTEGER :: l,ij | 
|---|
| 31 |   ! | 
|---|
| 32 |   !    ...............     variables  locales   ......................... | 
|---|
| 33 |  | 
|---|
| 34 |   REAL :: aiy1( iip1 ) , aiy2( iip1 ) | 
|---|
| 35 |   REAL :: sumypn,sumyps | 
|---|
| 36 |   !    ................................................................... | 
|---|
| 37 |   ! | 
|---|
| 38 |   REAL :: SSUM | 
|---|
| 39 |   ! | 
|---|
| 40 |   ! | 
|---|
| 41 |   DO l = 1,klevel | 
|---|
| 42 |   ! | 
|---|
| 43 |     DO  ij = iip2, ip1jm - 1 | 
|---|
| 44 |      div( ij + 1, l )     = & | 
|---|
| 45 |            cvusurcu( ij+1 ) * x( ij+1,l ) - cvusurcu( ij ) * x( ij , l) + & | 
|---|
| 46 |            cuvsurcv(ij-iim) * y(ij-iim,l) - cuvsurcv(ij+1) * y(ij+1,l) | 
|---|
| 47 |     ENDDO | 
|---|
| 48 |   ! | 
|---|
| 49 |   ! ....  correction pour  div( 1,j,l)  ...... | 
|---|
| 50 |   ! ....   div(1,j,l)= div(iip1,j,l) .... | 
|---|
| 51 |   ! | 
|---|
| 52 |   !DIR$ IVDEP | 
|---|
| 53 |     DO  ij = iip2,ip1jm,iip1 | 
|---|
| 54 |      div( ij,l ) = div( ij + iim,l ) | 
|---|
| 55 |     ENDDO | 
|---|
| 56 |   ! | 
|---|
| 57 |   ! ....  calcul  aux poles  ..... | 
|---|
| 58 |   ! | 
|---|
| 59 |     DO  ij  = 1,iim | 
|---|
| 60 |      aiy1(ij) =    cuvsurcv(    ij       ) * y(     ij     , l ) | 
|---|
| 61 |      aiy2(ij) =    cuvsurcv( ij+ ip1jmi1 ) * y( ij+ ip1jmi1, l ) | 
|---|
| 62 |     ENDDO | 
|---|
| 63 |     sumypn = SSUM ( iim,aiy1,1 ) / apoln | 
|---|
| 64 |     sumyps = SSUM ( iim,aiy2,1 ) / apols | 
|---|
| 65 |   ! | 
|---|
| 66 |     DO  ij = 1,iip1 | 
|---|
| 67 |      div(     ij    , l ) = - sumypn | 
|---|
| 68 |      div( ij + ip1jm, l ) =   sumyps | 
|---|
| 69 |     ENDDO | 
|---|
| 70 |   END DO | 
|---|
| 71 |   ! | 
|---|
| 72 |  | 
|---|
| 73 |     CALL filtreg( div, jjp1, klevel, 2, 2, .TRUE., 1 ) | 
|---|
| 74 |  | 
|---|
| 75 |   ! | 
|---|
| 76 |     DO l = 1, klevel | 
|---|
| 77 |        DO ij = iip2,ip1jm | 
|---|
| 78 |         div(ij,l) = div(ij,l) * unsaire(ij) | 
|---|
| 79 |       ENDDO | 
|---|
| 80 |     ENDDO | 
|---|
| 81 |   ! | 
|---|
| 82 |    RETURN | 
|---|
| 83 | END SUBROUTINE divergf | 
|---|