/[lmdze]/trunk/dyn3d/Dissipation/gradiv2.f
ViewVC logotype

Diff of /trunk/dyn3d/Dissipation/gradiv2.f

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

trunk/libf/dyn3d/gradiv2.f90 revision 54 by guez, Tue Dec 6 15:07:04 2011 UTC trunk/libf/dyn3d/Dissipation/gradiv2.f90 revision 57 by guez, Mon Jan 30 12:54:02 2012 UTC
# Line 4  module gradiv2_m Line 4  module gradiv2_m
4    
5  contains  contains
6    
7    SUBROUTINE gradiv2(klevel, xcov, ycov, ld, gdx, gdy, cdivu)    SUBROUTINE gradiv2(xcov, ycov, ld, gdx, gdy, cdivu)
8    
9      ! From LMDZ4/libf/dyn3d/gradiv2.F, version 1.1.1.1 2004/05/19 12:53:07      ! From LMDZ4/libf/dyn3d/gradiv2.F, version 1.1.1.1 2004/05/19 12:53:07
   
10      ! P. Le Van      ! P. Le Van
11      ! calcul de grad div du vecteur v      ! Calcul de grad div du vecteur v.
     ! xcov et ycov etant les composantes covariantes de v  
     ! xcont, ycont et ld sont des arguments d'entree pour le sous-programme  
     ! gdx et gdy sont des arguments de sortie pour le sous-programme  
   
     use dimens_m  
     use paramet_m  
     use comgeom  
     use filtreg_m, only: filtreg  
12    
13      ! variables en arguments      USE dimens_m, ONLY : iim, jjm, llm
14        use divergf_m, only: divergf
15        USE comgeom, ONLY : cuvscvgam1, cvuscugam1, unsair_gam1, unsapolnga1, &
16             unsapolsga1
17        USE filtreg_m, ONLY : filtreg
18        use nr_util, only: assert_eq, assert
19    
20        ! Composantes covariantes de v :
21        REAL, intent(in):: xcov(:, :, :) ! (iim + 1, jjm + 1, klevel)
22        REAL, intent(in):: ycov(:, :, :) ! (iim + 1, jjm, klevel)
23    
     INTEGER klevel  
     REAL xcov( ip1jmp1,klevel), ycov( ip1jm,klevel)  
24      integer, intent(in):: ld      integer, intent(in):: ld
25      REAL gdx( ip1jmp1,klevel), gdy( ip1jm,klevel)      REAL, intent(out):: gdx(:, :, :) ! (iim + 1, jjm + 1, klevel)
26        REAL, intent(out):: gdy(:, :, :) ! (iim + 1, jjm, klevel)
27      real, intent(in):: cdivu      real, intent(in):: cdivu
28    
29      ! variables locales      ! Variables locales :
30        REAL nugrads, div(iim + 1, jjm + 1, llm)
31      REAL div(ip1jmp1,llm)      INTEGER iter, klevel
     REAL nugrads  
     INTEGER l,ij,iter  
32    
33      !--------------------------------------------------------------      !--------------------------------------------------------------
34    
35      CALL SCOPY( ip1jmp1 * klevel, xcov, 1, gdx, 1)      call assert((/size(xcov, 1), size(ycov, 1), size(gdx, 1), size(gdy, 1)/) &
36      CALL SCOPY( ip1jm * klevel, ycov, 1, gdy, 1)           == iim + 1, "gradiv2 iim")
37        call assert((/size(xcov, 2) - 1, size(ycov, 2), size(gdx, 2) - 1, &
38             size(gdy, 2)/) == jjm, "gradiv2 iim")
39        klevel = assert_eq(size(xcov, 3), size(ycov, 3), size(gdx, 3), &
40             size(gdy, 3), "gradiv2 klevel")
41    
42        gdx = xcov
43        gdy = ycov
44    
45      CALL divergf( klevel, gdx, gdy, div)      CALL divergf(klevel, gdx, gdy, div)
46    
47      IF( ld.GT.1) THEN      IF (ld > 1) THEN
48         CALL laplacien ( klevel, div, div)         CALL laplacien(klevel, div, div)
49    
50         ! Iteration de l'operateur laplacien_gam         ! ItĂ©ration de l'opĂ©rateur laplacien_gam
51         DO iter = 1, ld -2         DO iter = 1, ld -2
52            CALL laplacien_gam ( klevel,cuvscvgam1,cvuscugam1,unsair_gam1, &            CALL laplacien_gam(klevel, cuvscvgam1, cvuscugam1, unsair_gam1, &
53                 unsapolnga1, unsapolsga1, div, div)                 unsapolnga1, unsapolsga1, div, div)
54         ENDDO         END DO
55      ENDIF      ENDIF
56    
57      CALL filtreg( div, jjp1, klevel, 2, 1, .TRUE., 1)      CALL filtreg(div, jjm + 1, klevel, 2, 1, .TRUE., 1)
58      CALL grad ( klevel, div, gdx, gdy)      CALL grad(klevel, div, gdx, gdy)
59      nugrads = (-1.)**ld * cdivu      nugrads = (-1.)**ld * cdivu
60    
61      DO l = 1, klevel      gdx = gdx * nugrads
62         DO ij = 1, ip1jmp1      gdy = gdy * nugrads
           gdx( ij,l) = gdx( ij,l) * nugrads  
        ENDDO  
        DO ij = 1, ip1jm  
           gdy( ij,l) = gdy( ij,l) * nugrads  
        ENDDO  
     ENDDO  
63    
64    END SUBROUTINE gradiv2    END SUBROUTINE gradiv2
65    

Legend:
Removed from v.54  
changed lines
  Added in v.57

  ViewVC Help
Powered by ViewVC 1.1.21