/[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 55 by guez, Mon Dec 12 13:25:01 2011 UTC trunk/libf/dyn3d/divergf.f90 revision 57 by guez, Mon Jan 30 12:54:02 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, v 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        use filtreg_m, only: filtreg      USE paramet_m, ONLY: iip1, iip2, ip1jm, ip1jmi1, ip1jmp1, jjp1
17        IMPLICIT NONE      USE comgeom, ONLY: apoln, apols, cuvsurcv, cvusurcu, unsaire
18  c      USE filtreg_m, ONLY: filtreg
19  c      x  et  y  sont des arguments  d'entree pour le s-prog  
20  c        div      est  un argument  de sortie pour le s-prog      ! div est un argument de sortie pour le s-prog
21  c  
22  c      ! variables en arguments
23  c   ---------------------------------------------------------------------  
24  c      INTEGER, intent(in):: klevel
25  c    ATTENTION : pendant ce s-pg , ne pas toucher au COMMON/scratch/  .      REAL, intent(in):: x(ip1jmp1, klevel), y(ip1jm, klevel)
26  c      real div(ip1jmp1, klevel)
27  c   ---------------------------------------------------------------------  
28  c      ! variables locales
29  c    ..........          variables en arguments    ...................  
30  c      INTEGER l, ij
31        INTEGER, intent(in):: klevel      REAL aiy1(iip1) , aiy2(iip1)
32        REAL x( ip1jmp1,klevel ),y( ip1jm,klevel ),div( ip1jmp1,klevel )      REAL sumypn, sumyps
33        INTEGER   l,ij  
34  c      REAL SSUM
35  c    ...............     variables  locales   .........................  
36        !------------------------------------------------------------
37        REAL aiy1( iip1 ) , aiy2( iip1 )  
38        REAL sumypn,sumyps      DO l = 1, klevel
39  c    ...................................................................         DO ij = iip2, ip1jm - 1
40  c            div(ij + 1, l) = cvusurcu(ij+1) * x(ij+1, l) &
41        REAL      SSUM                 - cvusurcu(ij) * x(ij , l) + cuvsurcv(ij-iim) * y(ij-iim, l) &
42  c                 - cuvsurcv(ij+1) * y(ij+1, l)
43  c         ENDDO
44        DO 10 l = 1,klevel  
45  c         DO ij = iip2, ip1jm, iip1
46          DO  ij = iip2, ip1jm - 1            div(ij, l) = div(ij + iim, l)
47           div( ij + 1, l )     =           ENDDO
48       *   cvusurcu( ij+1 ) * x( ij+1,l ) - cvusurcu( ij ) * x( ij , l) +  
49       *   cuvsurcv(ij-iim) * y(ij-iim,l) - cuvsurcv(ij+1) * y(ij+1,l)         ! Calcul aux pôles
50          ENDDO  
51  c         DO ij = 1, iim
52  c     ....  correction pour  div( 1,j,l)  ......            aiy1(ij) = cuvsurcv(ij) * y(ij , l)
53  c     ....   div(1,j,l)= div(iip1,j,l) ....            aiy2(ij) = cuvsurcv(ij+ ip1jmi1) * y(ij+ ip1jmi1, l)
54  c         ENDDO
55  CDIR$ IVDEP         sumypn = SSUM (iim, aiy1, 1) / apoln
56          DO  ij = iip2,ip1jm,iip1         sumyps = SSUM (iim, aiy2, 1) / apols
57           div( ij,l ) = div( ij + iim,l )  
58          ENDDO         DO ij = 1, iip1
59  c            div(ij , l) = - sumypn
60  c     ....  calcul  aux poles  .....            div(ij + ip1jm, l) = sumyps
61  c         ENDDO
62          DO  ij  = 1,iim      end DO
63           aiy1(ij) =    cuvsurcv(    ij       ) * y(     ij     , l )  
64           aiy2(ij) =    cuvsurcv( ij+ ip1jmi1 ) * y( ij+ ip1jmi1, l )      CALL filtreg(div, jjp1, klevel, 2, 2, .TRUE., 1)
65          ENDDO  
66          sumypn = SSUM ( iim,aiy1,1 ) / apoln      DO l = 1, klevel
67          sumyps = SSUM ( iim,aiy2,1 ) / apols         DO ij = iip2, ip1jm
68  c            div(ij, l) = div(ij, l) * unsaire(ij)
69          DO  ij = 1,iip1         ENDDO
70           div(     ij    , l ) = - sumypn      ENDDO
71           div( ij + ip1jm, l ) =   sumyps  
72          ENDDO    END SUBROUTINE divergf
73    10  CONTINUE  
74  c  end module divergf_m
   
         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.55  
changed lines
  Added in v.57

  ViewVC Help
Powered by ViewVC 1.1.21