/[lmdze]/trunk/dyn3d/divergf.f
ViewVC logotype

Diff of /trunk/dyn3d/divergf.f

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

trunk/libf/dyn3d/divergf.f revision 3 by guez, Wed Feb 27 13:16:39 2008 UTC trunk/libf/dyn3d/divergf.f90 revision 64 by guez, Wed Aug 29 14:47:17 2012 UTC
# Line 1  Line 1 
1  !  module divergf_m
2  ! $Header: /home/cvsroot/LMDZ4/libf/dyn3d/divergf.F,v 1.1.1.1 2004/05/19 12:53:05 lmdzadmin Exp $  
3  !    IMPLICIT NONE
4        SUBROUTINE divergf(klevel,x,y,div)  
5  c  contains
6  c     P. Le Van  
7  c    SUBROUTINE divergf(klevel, x, y, div)
8  c  *********************************************************************  
9  c  ... calcule la divergence a tous les niveaux d'1 vecteur de compos.      ! From libf/dyn3d/divergf.F, version 1.1.1.1 2004/05/19 12:53:05
10  c     x et y...  
11  c              x et y  etant des composantes covariantes   ...      ! P. Le Van
12  c  *********************************************************************      ! Calcule la divergence à tous les niveaux d'un vecteur de
13        use dimens_m      ! composantes x et y. x et y sont des composantes covariantes.
14        use paramet_m  
15        use comgeom      USE dimens_m, ONLY: iim
16        IMPLICIT NONE      USE paramet_m, ONLY: iip1, iip2, ip1jm, ip1jmi1, ip1jmp1, jjp1
17  c      USE comgeom, ONLY: apoln, apols, cuvsurcv, cvusurcu, unsaire
18  c      x  et  y  sont des arguments  d'entree pour le s-prog      USE filtreg_m, ONLY: filtreg
19  c        div      est  un argument  de sortie pour le s-prog  
20  c      INTEGER, intent(in):: klevel
21  c      REAL, intent(in):: x(ip1jmp1, klevel), y(ip1jm, klevel)
22  c   ---------------------------------------------------------------------      real, intent(out):: div(ip1jmp1, klevel) ! in (unit of x, y) m-2
23  c  
24  c    ATTENTION : pendant ce s-pg , ne pas toucher au COMMON/scratch/  .      ! Variables locales :
25  c  
26  c   ---------------------------------------------------------------------      INTEGER l, ij
27  c      REAL aiy1(iim) , aiy2(iim)
28  c    ..........          variables en arguments    ...................      REAL sumypn, sumyps
29  c  
30        INTEGER klevel      !------------------------------------------------------------
31        REAL x( ip1jmp1,klevel ),y( ip1jm,klevel ),div( ip1jmp1,klevel )  
32        INTEGER   l,ij      DO l = 1, klevel
33  c         DO ij = iip2, ip1jm - 1
34  c    ...............     variables  locales   .........................            div(ij + 1, l) = cvusurcu(ij+1) * x(ij+1, l) &
35                   - cvusurcu(ij) * x(ij , l) + cuvsurcv(ij-iim) * y(ij-iim, l) &
36        REAL aiy1( iip1 ) , aiy2( iip1 )                 - cuvsurcv(ij+1) * y(ij+1, l)
37        REAL sumypn,sumyps         ENDDO
38  c    ...................................................................  
39  c         DO ij = iip2, ip1jm, iip1
40        REAL      SSUM            div(ij, l) = div(ij + iim, l)
41  c         ENDDO
42  c  
43        DO 10 l = 1,klevel         ! Calcul aux pôles
44  c  
45          DO  ij = iip2, ip1jm - 1         DO ij = 1, iim
46           div( ij + 1, l )     =              aiy1(ij) = cuvsurcv(ij) * y(ij , l)
47       *   cvusurcu( ij+1 ) * x( ij+1,l ) - cvusurcu( ij ) * x( ij , l) +            aiy2(ij) = cuvsurcv(ij+ ip1jmi1) * y(ij+ ip1jmi1, l)
48       *   cuvsurcv(ij-iim) * y(ij-iim,l) - cuvsurcv(ij+1) * y(ij+1,l)         ENDDO
49          ENDDO         sumypn = SUM(aiy1) / apoln
50  c         sumyps = SUM(aiy2) / apols
51  c     ....  correction pour  div( 1,j,l)  ......  
52  c     ....   div(1,j,l)= div(iip1,j,l) ....         DO ij = 1, iip1
53  c            div(ij , l) = - sumypn
54  CDIR$ IVDEP            div(ij + ip1jm, l) = sumyps
55          DO  ij = iip2,ip1jm,iip1         ENDDO
56           div( ij,l ) = div( ij + iim,l )      end DO
57          ENDDO  
58  c      CALL filtreg(div, jjp1, klevel, 2, 2, .TRUE.)
59  c     ....  calcul  aux poles  .....  
60  c      DO l = 1, klevel
61          DO  ij  = 1,iim         DO ij = iip2, ip1jm
62           aiy1(ij) =    cuvsurcv(    ij       ) * y(     ij     , l )            div(ij, l) = div(ij, l) * unsaire(ij)
63           aiy2(ij) =    cuvsurcv( ij+ ip1jmi1 ) * y( ij+ ip1jmi1, l )         ENDDO
64          ENDDO      ENDDO
65          sumypn = SSUM ( iim,aiy1,1 ) / apoln  
66          sumyps = SSUM ( iim,aiy2,1 ) / apols    END SUBROUTINE divergf
67  c  
68          DO  ij = 1,iip1  end module divergf_m
          div(     ij    , l ) = - sumypn  
          div( ij + ip1jm, l ) =   sumyps  
         ENDDO  
   10  CONTINUE  
 c  
   
         CALL filtreg( div, jjp1, klevel, 2, 2, .TRUE., 1 )  
         
 c  
         DO l = 1, klevel  
            DO ij = iip2,ip1jm  
             div(ij,l) = div(ij,l) * unsaire(ij)  
           ENDDO  
         ENDDO  
 c  
        RETURN  
        END  

Legend:
Removed from v.3  
changed lines
  Added in v.64

  ViewVC Help
Powered by ViewVC 1.1.21